Feature #13630
closed:[] method should accept block in nice syntax
Description
# given
module Bam
def self.[](bam)
yield bam
end
end
# SyntaxError: unexpected keyword_do_block
Bam['bam'] do |b|
puts b
end
# SyntaxError: unexpected { arg, expecting end-of-input
Bam['bam'] { |b|
puts b
}
# Valid but more verbose
Bam.[]('bam') do |b|
puts b
end
Bam.[]('bam') { |b|
puts b
}
Updated by shevegen (Robert A. Heiler) almost 7 years ago
I agree. I always wondered about this too.
I did not make a suggestion like this because I suspect that one reason may be a parser issue, as otherwise it would most likely have been done already.
In particular for elements without any arguments like:
Bam.[] { |b| puts b }
Or more verbose to use your example:
module Bam
def self.[](bam=42)
yield bam
end
end
Bam.[] { |b| puts b } # => 42
Bam[] { |b| puts b } # => SyntaxError: (irb):14: syntax error, unexpected { arg, expecting end-of-input
Only difference here between failure and success is one lonely '.'. I am not sure if it is technically
possible to get rid of the '.', but if it would be possible, that would be great. The '.' visually
disturbs me when I see [] ... but not at other places, it's weird. :D
Edit: Ok, my example was not good but I guess the difference between .[] and [] can be seen which is the main point.
Updated by nobu (Nobuyoshi Nakada) over 6 years ago
The trunk accepts a block after []
now.
Updated by shyouhei (Shyouhei Urabe) over 6 years ago
- Status changed from Open to Closed
We looked at this at a developer meeting today and confirmed that this is already done.
Updated by matz (Yukihiro Matsumoto) over 6 years ago
And now mruby does too.
Matz.