0

次のようなネストされたクラスがあります。

class Mammal
    H = "Mammal"

    class Human
        H = "Human"
    end

end

そして、私は人間のオブジェクトを作成し、人間の定数にアクセスした後、次のようにします:

human = Mammal::Human.new # makes an object successfully

puts human::H             # does not work **
puts Mammal::Human::H     # works ["Human"]
puts Mammal::H            # works ["Mammal"]

**.. しかし、うまくいきません (".. is not a class/module [TypeError]")。私は何を間違っていますか?

4

2 に答える 2

4

私は何を間違っていますか?

間違ったコンテキストから定数を参照しようとしています。定数は、インスタンスではなく、クラス オブジェクトで定義されます。これは機能します:

human = Mammal::Human.new
human.class.const_get(:H) # => "Human"
于 2013-01-10T15:11:12.563 に答える
1

定数はクラスに属しているため、::演算子による定数解決は、クラスのインスタンスではなく、クラス オブジェクトでのみ機能します。

そうは言っても、これを行うことができます:

human.class::H

Object#class定数を解決できるオブジェクトのクラスを返します。

于 2013-01-10T15:13:56.553 に答える