0

irb からの興味深い出力:

irb(main):001:0> Class.ancestors
=> [Class, Module, Object, Kernel, BasicObject]
irb(main):002:0> class Foo
irb(main):003:1> end
=> nil
irb(main):004:0> module Foo
irb(main):005:1> end
TypeError: Foo is not a module
        from (irb):4
        from D:/Ruby193/bin/irb:12:in '<main>'
irb(main):006:0> Foo.is_a? Module
=> true

クラスの定義によると、クラスはインスタンス化できる派生モジュールです。しかし、irb は、モジュールである場合もあれば、そうでない場合もあると教えてくれます...

4

2 に答える 2

2

クラスがオブジェクトのクラスである場合だけでなく、クラスがオブジェクトのスーパークラスの1つである場合、またはオブジェクトに含まれるモジュールの場合にもtrueを返すため、式Foo.is_a? Classも返されます。trueis_a?

于 2012-04-24T20:15:52.983 に答える
2

ここでの問題は、Class( Foo) を作成し、それを として再定義しようとしていることModuleです。クラスとモジュールの継承に関係なく、一方を他方に変更したり、それらの間で「キャスト」したりすることはできません

于 2012-04-24T19:58:00.637 に答える