2

疑問符を含む属性を使用してStructを作成すると、そのクラスのどのインスタンスもそのメソッドを見つけることができなくなります。例えば

    Test = Struct.new(:value, :value?)
    t = Test.new(true,true)
    t.value
      => true
    t.value?
    NoMethodError: undefined method `value?' for #<struct Test value=true, :value?=true> 

何か案が ?Ruby1.9.3-p286を使用しています。

4

1 に答える 1

3

Rubyのメソッド名の中には特別なものがあることを認める必要があります。たとえば、メソッドを定義した場合

o = Object.new
def o.kokot= n
  return n + 1
end

そして電話

o.kokot 1
#=> 1

結果は、予想どおり2ではなく1のままになります。=これは、サインインメソッド名の特性です。Structsの場合、疑問符にもそのような特殊性があるようです。これにより、次のように呼び出して値を取得できなくなります。

t.value?

あなたは電話する必要があります

t[:value?]

それだけです、良い一日を。

于 2013-02-02T03:23:54.857 に答える