Issue #5054 has been updated by Nick Howard.
I don't think this is a good idea because I think it makes code harder to modify correctly.
Say you wanted to add a new method to MyModule::MyClass. With the old syntax it's simple, just add a line below the method defined in the class body.
module MyModule
class MyClass
def my_method
10.times do
if rand < 0.5
p :small
end
end
end
def your_method
p :something
end
end
end
with en+d, you now need to count the number of 'n's in the last en+d,
count the number of expressions in the method that need to be closed,
create a new en+d with that number,
and put the remainder at the end.
Then, write your method and add more 'n's to the final end to match up with the number of blocks you opened.
module MyModule
class MyClass
def my_method
10.times do
if rand < 0.5
p :small
ennnd
def your_method
p :something
ennnd
----------------------------------------
Feature #5054: Compress a sequence of ends
http://redmine.ruby-lang.org/issues/5054
Author: ANDO Yasushi ANDO
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
Though as matz said at rubykaigi2011 ruby is a quite good language, many people hate a long sequence of `end' like this:
module MyModule
class MyClass
def my_method
10.times do
if rand < 0.5
p :small
end
end
end
end
end
So, I'd like to propose introducing a special keyword, en(n+)d. Using this keyword, we can rewrite the above example like this:
module MyModule
class MyClass
def my_method
10.times do
if rand < 0.5
p :small
ennnnnd
I know matz's already rejected a python-style block. He wrote:
> it works badly with
> * tab/space mixture
> * templates, e.g. eRuby
> * expression with code chunk, e.g lambdas and blocks
http://www.ruby-forum.com/topic/108457
These bad things won't occur by introducing en(n+)d.
Some implementations already exists.
JRuby
- https://gist.github.com/1088363
CRuby
- http://www.atdot.net/sp/raw/kn9iol
- http://d.hatena.ne.jp/ku-ma-me/20110718/p1
Thanks for your consideration.
--
http://redmine.ruby-lang.org