Lor*_*ssi 2 ruby ruby-on-rails
我想弄清楚为什么案例 C 不起作用。正如您所看到的,当我使用 'yield' 和 '<<' 糖语法时,它会引发错误,但如果我使用该方法的名称 'acc.push',它会起作用。另一方面,如果我使用 'result' 变量来获取 yield 结果,然后使用 << 语法添加到 acc 数组,它就可以工作。我只是想了解为什么它在 C 的情况下不起作用。谢谢。
案例 A - 工作正常
def my_map(my_arr)
c = 0 # the counter
acc = [] # new array
until c == my_arr.length
acc.push(yield my_arr[c])
c += 1
end
acc
end
p my_map( [1,2,3,4] ) { |each| each * 10 }
Run Code Online (Sandbox Code Playgroud)
案例 B - 工作正常
def my_map(my_arr)
c = 0 # the counter
acc = [] # new array
until c == my_arr.length
result = yield my_arr[c]
acc << result
c += 1
end
acc
end
p my_map( [1,2,3,4] ) { |each| each * 10 }
Run Code Online (Sandbox Code Playgroud)
案例 C - 错误:语法错误,意外的局部变量或方法,期望‘end’ acc << yield my_arr[c]
def my_map(my_arr)
c = 0 # the counter
acc = [] # new array
until c == my_arr.length
acc << yield my_arr[c]
c += 1
end
acc
end
p my_map( [1,2,3,4] ) { |each| each * 10 }
Run Code Online (Sandbox Code Playgroud)
虽然您期望 Ruby 解释acc << yield my_arr[c]为
acc.<<(yield(my_arr[c]))
Run Code Online (Sandbox Code Playgroud)
Ruby 实际上是这样理解的
acc.<<(yield)(my_arr[c])
Run Code Online (Sandbox Code Playgroud)
这没有多大意义。正如其他人已经提到的,它可以通过使用括号来修复:
acc << yield(my_arr[c])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |