我刚遇到一个问题,函数返回的值是不同的,这取决于我是否调用puts对该结果.我想知道这是否是预期的,或某种解析器错误.
仅当传递给函数的块使用do...end语法而不是内联{...}语法时才会出现这种情况.这是一个例子:
arr = ["a", "b", "c"]
puts i = arr.index { |x| == "b" }
#=> 1
Run Code Online (Sandbox Code Playgroud)
正如所料,但这并不像我预期的那样有效:
arr = ["a", "b", "c"]
puts i = arr.index do |x|
x == "b"
end
#=> #<Enumerator:0xSomeId>
Run Code Online (Sandbox Code Playgroud)
虽然如果我这样做它可以正常工作:
arr = ["a", "b", "c"]
i = arr.index do |x|
x == "b"
end
puts i
#=> 1
Run Code Online (Sandbox Code Playgroud)
看起来它被解释为好像没有传递任何块(返回枚举器是arr.index使用块调用的预期行为).这是正常的吗?这种行为是在任何地方解释/记录的