Chinese, Simplified subtitles

← Groovy Closures and Objects

Get Embed Code
4 Languages

Showing Revision 5 created 09/15/2016 by Udacity Robot.

  1. 现在我们已下载了基础教程
  2. 让我们看一些 Groovy 的高级功能
  3. 第一个功能是闭包
  4. 闭包实际上是一种不同的函数声明方式
  5. 它是一种可以被打包、传递和赋值给变量的函数
  6. 你只需使用类似花括号中的代码就可声明一个这样的函数
  7. 我们之所以称之为闭包
  8. 是因为它还可以从封闭的环境中获取变量
  9. 因此 foo 的值将始终是非常重要的
  10. 既然 myClosure 是一个函数 那么让我们继续尝试调用
  11. 只需将圆括号置于 myClosure 之后 就可以对其进行调用 接下来让我们试一下
  12. 太棒了 我们成功了
  13. 我们正从闭包内部获取 print 语句
  14. 而 foo 的值在闭包内部得到遵守
  15. 与正常的函数不同 闭包可在不同的变量之间传递
  16. 因此 如果我们声明变量 bar 并将其设置为与 myClosure 等同
  17. 然后再声明另一个变量 baz 并将其设置为与 t0 bar 等同
  18. 我们就可以调用 baz 了 因为 baz 现在是一个函数
  19. 现在开始
  20. 通过调用 baz 我们得到了与调用 myClosure 完全一样的结果
  21. 好的 现在让我们做一些真正复杂的事情 大家要用心听了
  22. 闭包为参数设置了不同的语法
  23. 你将以逗号隔开的参数列表放在箭头的左侧
  24. 然后就可以使用此参数做任何想做的事情
  25. 因此 我希望大家都可以明白
  26. 这实际上是一个可以进行双重输入的函数
  27. 复杂之处在于 Gradle 允许高阶函数
  28. 即允许以输入值之一作为另一个函数的函数
  29. 这里我们以 applyTwice 为例
  30. 它的第一个参数是个函数
  31. 第二个参数只是一些在该函数内传递的参数
  32. 而 applyTwice 返回的结果是两次应用到该参数的函数
  33. 我们看一个例子
  34. 我们将 foo 的值设为 5 然后我们使 foo 两次应用 doubleIt
  35. 我们看一下结果
  36. 运行之前 看看你能否提前想到会得到什么样的结果
  37. 现在我们看 5 的两倍是 10 而 10 的两倍是 20
  38. 棒极了!
  39. 现在我们讨论下 Groovy 中的列表
  40. Groovy 允许超级简单的列表字面值语法
  41. 同时允许一些超级复杂的列表处理
  42. 例如 我们可以对列表中的每个项目执行闭包
  43. 我们简单定义一下闭包
  44. 这种情况下 闭包将输出每个项目
  45. 接着我们调用 myList.each 然后是闭包
  46. 现在我们看结果怎样
  47. 现在开始
  48. 系统输出了列表中的每个项目
  49. 这里我们可以做出多项更改
  50. 以简化某些方面
  51. 第一项是 我们可以在行中定义闭包
  52. 请注意 此处周围并没有圆括号
  53. 因为 Groovy 语法非常棒
  54. 而且 如果闭包只使用了一个参数
  55. 那么默认情况下该参数可以调用闭包
  56. 接下来我们尝试运行一下这个过程
  57. 现在开始正是我们所期望的结果
  58. 现在我们讨论下 Groovy 中的类
  59. 对于创建类 Groovy 有一个非常简单的语法
  60. 但从底层看 类本身是 Java 的基本组成部分
  61. 所以 这里是一个类
  62. 这里是一个成员变量 这里是一个方法
  63. 我们可以创建 Java 中惯用的一个新类
  64. 然后 我们将要求该类输出其 greeting
  65. 我们也可以更改此 greeting 并要求该类再次输出此 greeting
  66. Groovy 自动为所有的成员变量
  67. 设置 getter 和 setter
  68. 让我们尝试一下
  69. 输出结果正是我们所预期的
  70. 首次输出的是默认 greeting
  71. 在我们自定义之后 输出的是自定义 greeting
  72. 闭包可以设置代表对象
  73. 让我们看一下我们已创建的这个闭包是否可以
  74. 该闭包正尝试给名称为 greeting 的变量赋值
  75. 但 greetingClosure 并没有名称为 greeting 的变量
  76. 实际上 greeting 所定义的唯一设置是
  77. 作为此类的成员变量
  78. 我们所能做的就是 将 greetingClosure 的代表设置为
  79. GroovyGreeter 的实例
  80. 现在 greeting 闭包可以访问成员变量和
  81. GroovyGreeter 实例的方法
  82. 在将 greetingClosure 的代表设置为 myGroovyGreeter 的实例后
  83. 当我们调用 greetingClosure 时 如果一切运行良好
  84. greetingClosure 应该可以设置 greeting 并可以很好地输出 greeting
  85. 我们试一下
  86. 现在开始
  87. 我们已从闭包中成功更改了
  88. GroovyGreeter 实例中的 greeting
  89. 恭喜你完成了 Groovy 的旋风之旅
  90. 我知道需要学习的内容还有很多
  91. 幸运的是 这里有大量的学习资源可为你提供帮助
  92. 我们在讲师注释中提供了许多链接
  93. 我强烈推荐在讲述类的示例代码中再次学习本课程