Ruby Struct 实例找不到名称中包含 '?' 的属性

标签 ruby

如果我创建一个具有包含问号的属性的结构,则该类的任何实例都将无法找到该方法。例如

    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/

相关文章:

ruby - 如何在 Ruby 中动态确定方法名称

ruby - 如何在 Sequel 中创建准备好的插入语句?

ruby-on-rails - Rspec 引发错误未按预期工作,需要正确的语法

java - 使用参数从rails应用程序执行jar并将响应数据返回到rails

ruby-on-rails - 捆绑 geoip-c - 给出错误 "you must have geoip c library installed"

ruby-on-rails - RSpec allow_any_instance_of 在请求测试中不起作用

ruby - 如何创建两个哈希的交集?

sql - 查询中的 Postgres/Rails 复数问题

sql - 限制类别页面上产品列表中子类别的项目数量?

ruby-on-rails - Ruby httparty 加载错误