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> 

任何想法 ?我正在使用 Ruby 1.9.3-p286。

4

1 回答 1

3

你不得不承认 Ruby 中的一些方法名称是特殊的。例如,如果您定义了方法

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

并打电话

o.kokot 1
#=> 1

结果仍然是 1,而不是您可能期望的 2。这是=登录方法名称的特殊性。在您的结构的情况下,问号似乎也有这样的特殊性,这会阻止您通过调用来检索值:

t.value?

你必须打电话

t[:value?]

就是这样,祝你有美好的一天。

于 2013-02-02T03:23:54.857 回答