Issue #6287 has been updated by mame (Yusuke Endoh).

Description updated
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
----------------------------------------
Feature #6287: nested method should only be visible by nesting/enclosing method
https://bugs.ruby-lang.org/issues/6287#change-25883

Author: botp (bot pena)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: core
Target version: 3.0


> 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.





-- 
http://bugs.ruby-lang.org/