Actions
Bug #14935
closedInconsitent behaviour with puts and enumerator with different block format.
Bug #14935: Inconsitent behaviour with puts and enumerator with different block format.
Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin16]
Description
Case: 1¶
➜ ~ ruby puts [1,2,3].map do |i| puts i end #<Enumerator:0x007ffe930b76d0> ➜ ~ # block does get evaluated. Case 2:
➜ ~ ruby puts [1, 2, 3].map { |i| puts i } 1 2 3 ➜ ~ # Block gets evaluated. My question is Shouldn't both cases give consistent output.
Updated by shan (Shannon Skipper) over 7 years ago
#puts returns nil, so when you're mapping you end up with [nil, nil, nil], which prints with #puts as three blank lines. If you use p instead of puts inside the block, the block will return i instead of nil and you'll see the same output.
Updated by lucasbuchala (Lucas Buchala) over 7 years ago
I think this is because do ... end blocks has lower precedence than {...} blocks. As documented in [1]. So, probably, not a bug.
method1 method2 { ... } # method2's block method1 method2 do ... end # method1's block [1] http://ruby-doc.org/core-2.5.1/doc/syntax/calling_methods_rdoc.html#label-Block+Argument
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
- Status changed from Open to Rejected
Actions