在 Ruby 中以编程方式调用 属性
Call property programmatically in Ruby
我有一个 Ruby 项目,我在其中以编程方式获取我需要访问的散列中的键的名称。我可以通过以下方式访问我需要的字段:
current_content = entry.fields[property_name.to_sym]
但是,有些内容似乎只能通过 属性 语法访问:
m.title_with_locales = {'en-US' => 'US Title', 'nl' => 'NL Title'}
因为我不知道 "title" 提前,我怎样才能以编程方式进行调用?例如:
m.${property_name}_with_locales = {'en-US' => 'US Title', 'nl' => 'NL Title'}
您可以使用 #send 以编程方式访问属性:
m.send("#{property_name}_with_locales")
# => { 'en-US' => 'US Title', ... }
如果您需要访问一个 setter 并传入值,您可以这样做:
m.send("#{property_name}_with_locales=", { 'whatever' => 'value' })
除了@gwcodes写的send
,还有eval
和call
。
2.3.1 :010 > a
=> [1, 2, 3]
2.3.1 :011 > a.send("length")
=> 3
2.3.1 :012 > a.method("length").call
=> 3
2.3.1 :013 > eval "a.length"
=> 3
as shown on this blog post call
比 send
快一点。