Project

General

Profile

Feature #6287

nested method should only be visible by nesting/enclosing method

Added by botp (bot pena) about 5 years ago. Updated over 4 years ago.

Status:
Closed
Priority:
Normal
Target version:
[ruby-core:44329]

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.


Related issues

Duplicates Ruby trunk - Feature #4085: Refinements and nested methods Closed 11/24/2010

History

#1 [ruby-core:44333] Updated by shyouhei (Shyouhei Urabe) about 5 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.

#2 [ruby-core:44338] Updated by mame (Yusuke Endoh) about 5 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 Next Major

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

#3 [ruby-core:44342] Updated by cout (Paul Brannan) about 5 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
end

should 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

#4 Updated by shugo (Shugo Maeda) over 4 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.

Also available in: Atom PDF