[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:814

From: Minero Aoki <aamine loveruby.net>
Date: Tue, 07 Feb 2006 00:22:00 +0900 (JST)
Subject: [yarv-dev:814] open> def in def makes method private

青木です。

以下のようにメソッド中でメソッドを定義すると private になってしまいます。

~/c/yarv % cat t
class A
  def m
    def a
      puts "OK"
    end
  end
end

a = A.new
a.m
a.a

~/c/yarv % ruby -v t
ruby 1.9.0 (2006-02-01) [x86_64-linux]
OK

~/c/yarv % ./ruby -v t
ruby 1.9.0 (2005-11-18) [x86_64-linux]
YARVCore 0.3.3 (rev: 367) [opts: ]
t:11:in `method_missing': private method `a' called for #<A:0x00002a95eaeff0> (NoMethodError)
        from t:11:in `<main>'

以前 ruby 1.x で似たようなバグがあったんですが、そのときはトップレベルが
private スコープなのがそのまま出てしまったのが原因でした。insns.def を
見る限り、今回もそういうことなのではないかと思います。メソッド中の def は
すべて public にしてしまったらどうでしょうか。

--
青木峰郎

-- 
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

->     814 2006-02-07 00:22 [aamine loveruby.net ] open> def in def makes method private   
       838 2006-02-11 23:38 ┗[ko1 atdot.net       ] fixed> Re: open> def in def makes method private
       897 2006-02-15 19:13  ┗[ko1 atdot.net       ]                                     
       899 2006-02-15 19:34   ┣[aamine loveruby.net ] open> private alias make original method private
       900 2006-02-15 19:39   ┃┣[aamine loveruby.net ] Re: private alias make original method private
       901 2006-02-15 19:47   ┃┃┗[aamine loveruby.net ]                               
       902 2006-02-15 20:01   ┃┗[ko1 atdot.net       ] fixed> Re: open> private alias make original method private
       904 2006-02-15 22:57   ┗[matz ruby-lang.org  ]