Feature #6287
closednested method should only be visible by nesting/enclosing method
Description
def test1
def test2
p "i am test2"
end
test2
end
test1
"i am test2" # ok
test2
"i am test2" # not ok (imho), this should fail; ie test2 should only be visible by test1, not by outside.
Updated by shyouhei (Shyouhei Urabe) over 12 years ago
- Description updated (diff)
I know what you mean, but I think this is a limitation of Ruby's OOP nature. In Ruby, everything belongs to an object. So a method must belong to an object, not another method.
Updated by mame (Yusuke Endoh) over 12 years ago
- Description updated (diff)
- Status changed from Open to Assigned
- Assignee set to matz (Yukihiro Matsumoto)
- Target version changed from 2.0.0 to 3.0
Hello,
There is a similar proposal #4085 based on more general idea.
Below is my personal opinion.
Ruby's def statement is not a static definition, but a dynamic
execution that defines a method in the context. This design
allows you to define a method that is defined in some condition:
if windows?
def foo
end
end
, singleton methods for each element in an array:
ary.each do |elem|
def elem.foo
end
end
, and so on.
In the same manner, a "nested" method definition you said:
def define_foo
def foo
end
end
should define a method named "define_foo" that defines a method
named "foo." I think it is consistent.
--
Yusuke Endoh <mame@tsg.ne.jp
Updated by cout (Paul Brannan) over 12 years ago
On Fri, 2012-04-13 at 22:58 +0900, mame (Yusnuke Endoh) wrote:
In the same manner, a "nested" method definition you said:
def define_foo
def foo
end
endshould define a method named "define_foo" that defines a method
named "foo." I think it is consistent.
I agree. The behavior is consistent. But I'm yet to find a case where
this is useful.
Paul
Updated by shugo (Shugo Maeda) almost 12 years ago
- Status changed from Assigned to Closed
I've implemented all features requested by Matz, so I close this ticket.
The current spec is described at https://bugs.ruby-lang.org/projects/ruby-trunk/wiki/RefinementsSpec.
If you have any request for Refinements, please file a new ticket.
However, the feature set of Ruby 2.0.0 has already been frozen, so the spec won't be changed in Ruby 2.0.0 unless otherwise permitted by Matz or Endoh-san.