Ruby <<语法方法会引发错误,但.push方法在使用yield时不会.为什么?



我想弄清楚为什么情况C不工作。正如您所看到的,当我使用'yield'和'<<'糖语法时,它会引发错误,但是如果我使用方法的名称'acc;推一下就行了。另一方面,如果我使用'result'变量来获得yield结果,然后使用<<添加到acc数组语法,它是有效的。我只是想知道为什么在c的情况下它不起作用。

情况下-工作正常

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 }

案例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 }

案例C-错误:语法错误,意外的局部变量或方法,期望' end' acc <<收益率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 }

当您期望Ruby将acc << yield my_arr[c]解释为

acc.<<(yield(my_arr[c]))

Ruby实际上是这样理解的

acc.<<(yield)(my_arr[c])

这没什么意义。它可以通过使用括号来修复,就像其他人已经提到的那样:

acc << yield(my_arr[c])

您遇到了操作符优先级的情况,Ruby无法自行解决。

您可以通过使用括号来修复它,以便为Ruby提供足够的清晰度,以确定如何解析违规行:

acc << yield(my_arr[c])

在yield方法调用中使用圆括号。

acc << yield(my_arr[c])

我的猜测是<<试图将yield直接添加到数组中,从而导致语法错误。

相关内容

最新更新