puts [1,2,3].map do |x|
x + 1
end.inspect
Run Code Online (Sandbox Code Playgroud)
随着ruby 1.9.2的回归
<Enumerator:0x0000010086be50>
Run Code Online (Sandbox Code Playgroud)
红宝石1.8.7:
# 1
# 2
# 3
Run Code Online (Sandbox Code Playgroud)
分配变量......
x = [1,2,3].map do |x|
x + 1
end.inspect
puts x
Run Code Online (Sandbox Code Playgroud)
[2,3,4]
小胡子块按预期工作:
puts [1,2,3].map { |x| x + 1 }.inspect
Run Code Online (Sandbox Code Playgroud)
[2,3,4]
puts [1,2,3].map do |x|
x + 1
end.inspect
Run Code Online (Sandbox Code Playgroud)
被解析为:
puts([1,2,3].map) do |x|
x + 1
end.inspect
Run Code Online (Sandbox Code Playgroud)
即map,没有块(这将使它返回1.8中的未更改数组和1.9中的枚举器)被调用,并且块被传递给puts(它将忽略它).
它的工作原理与原因{},而不是do end在于{}具有不同的优先级,所以它解析为:
puts([1,2,3].map { |x| x + 1 }.inspect)
Run Code Online (Sandbox Code Playgroud)
类似地,使用变量的版本也起作用,因为在这种情况下根本没有歧义.
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |