関数によって返される値が、呼び出すかどうかによって結果が異なるという問題が発生しました。これが予想されるのか、それともある種のパーサーエラーなのか疑問に思います。
これは、関数に渡されるブロックが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
ブロックを使用して呼び出す場合の予想される動作です)。これは正常ですか?この動作はどこかで説明/文書化されていますか?