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