entries哈希在哪里:
entries = { foo: 1, bar: 2 }
Run Code Online (Sandbox Code Playgroud)
这是我熟悉的语法:
entries.map { |key, val| "#{key} #{val}" }
#=> ["foo 1", "bar 2"]
Run Code Online (Sandbox Code Playgroud)
这是我在教程中遇到的语法:
entries.map { |key_val| "#{key_val.first} #{key_val.last}" }
#=> ["foo 1", "bar 2"]
Run Code Online (Sandbox Code Playgroud)
我是Ruby的新手,所以我很惊讶这两种语法都能正常工作.我的问题是:
这两者有什么区别吗?
为什么这样做 - 是因为哈希表对象以两种不同的方式实现Enumerable接口(提供map方法)?
不,它与哈希和可枚举无关(好吧,差不多).这是我称之为"数组解构"的东西.Ruby有一种很好的方法可以将数组分开.假设你有这个双元素数组
ary = [1, 2]
Run Code Online (Sandbox Code Playgroud)
您可以通过单独访问它们来获取其元素
a = ary.first # or ary[0]
b = ary.last # or ary[-1]
Run Code Online (Sandbox Code Playgroud)
或者你可以通过直接将数组分配给变量来"解构"数组
a, b = ary
Run Code Online (Sandbox Code Playgroud)
a将是数组的第一个元素,b- 第二个(在这种特殊情况下也是最后一个).
您的示例中也会发生同样的事情 当在哈希上使用时,Enumerable each(即map调用的内容)产生两个元素的数组,一个键及其值.
现在,如果块只有一个参数,它就是那个数组.如果它有两个,你的阵列将被拆开.
是的,更喜欢第一种方法.更具可读性.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |