Project

General

Profile

Actions

Feature #6287

closed

nested method should only be visible by nesting/enclosing method

Added by botp (bot pena) almost 12 years ago. Updated about 11 years ago.

Status:
Closed
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 1 (0 open1 closed)

Is duplicate of Ruby master - Feature #4085: Refinements and nested methodsClosedshugo (Shugo Maeda)11/24/2010Actions

Updated by shyouhei (Shyouhei Urabe) almost 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) almost 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 <

Updated by cout (Paul Brannan) almost 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
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

Actions #4

Updated by shugo (Shugo Maeda) about 11 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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0