如果我创建一个具有包含问号的属性的结构,则该类的任何实例都将无法找到该方法。例如
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。
最佳答案
您必须承认 Ruby 中的某些方法名称很特殊。例如,如果您定义了方法
o = Object.new
def o.kokot= n
return n + 1
end
然后打电话
o.kokot 1
#=> 1
结果仍然是 1,而不是您所期望的 2。这是 =
登录方法名称的特殊性。在你的结构例子中,问号似乎也有这样的特性,它阻止你通过调用来检索值:
t.value?
你必须打电话
t[:value?]
就这样,祝你有美好的一天。
关于Ruby Struct 实例找不到名称中包含 '?' 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14658143/