[#48251] require 'dbi' の警告について — 稲葉伸之 <nobuyuki.inaba@...>

いなばともうします。

22 messages 2011/08/03
[#48260] Re: require 'dbi' の警告について — Fumiaki Sakamoto <ua6ta6@...> 2011/08/05

坂元と申します。

[#48261] Re: require 'dbi' の警告について — 稲葉伸之 <nobuyuki.inaba@...> 2011/08/05

いろいろありがとうございます。

[#48264] Re: require 'dbi' の警告について — "Y. Nobuoka" <nobuoka@...> 2011/08/05

信岡です。

[#48330] 1.25を %10.1f で出力したときバージョンにより表示に違いがでるのは何故でしょうか。 — paptimusx <paptimusx@...>

1.25を %10.1f で出力したとき、表示に違いがでるのですが、何故でしょうか。

10 messages 2011/08/23
[#48332] Re: 1.25を %10.1f で出力したときバージョンにより表示に違いがでるのは何故でしょうか。 — paptimusx <paptimusx@...> 2011/08/23

2つポストしてしまったようですいません。

[ruby-list:48257] Re: 動的なクラス定義とトップレベルでのinclude

From: Masa <mhatakeyama@...>
Date: 2011-08-04 07:07:28 UTC
List: ruby-list #48257
畠山です。

結論からいいますと、二番目のエラーが出たのはPuyoがFoo::Barの定数としてではなくトップレベルの定数だと認識されたためだと思います。
トップレベルの未定義定数の場合はObject.const_missingが呼ばれますので次のように定義すると両方とも実行されます。(実用的には二度同じ定義をするのはあまりよろしくないのでもう少し賢い方法はどなたかの回答を期待します...)


module Foo
 module Bar
   class Hoge
     def self.test
       "Foo::Bar::Hoge.test"
     end
   end

   def self.const_missing(sym)
p self
     module_eval %!
       class #{sym}
         def self.test
           "Foo::Bar::#{sym}.test"
         end
       end
     !
     const_get(sym)
   end

   def Object.const_missing(sym)
p self
     module_eval %!
       class #{sym}
         def self.test
           "Foo::Bar::#{sym}.test"
         end
       end
     !
     const_get(sym)
   end

 end
end

ちなみに

require 'dynamic'
include Foo::Bar
p Puyo.test # => "Foo::Bar::Puyo.test"
p Foo::Bar::Puyo.test # "Foo::Bar::Puyo.test"

とすると一つめと二つ目でselfの値が違っているのが分かります。

参考までに。

畠山

In This Thread