在Ruby中以编程方式调用属性[重复]

x33g5p2x  于 2023-05-06  发布在  Ruby
关注(0)|答案(2)|浏览(167)

此问题已在此处有答案

How to call methods dynamically based on their name? [duplicate](5个答案)
6年前关闭。
我有一个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'}
wsewodh2

wsewodh21#

您可以使用#send以编程方式访问属性:

m.send("#{property_name}_with_locales")
# => { 'en-US' => 'US Title', ... }

如果需要访问setter并传入值,可以执行以下操作:

m.send("#{property_name}_with_locales=", { 'whatever' => 'value' })
az31mfrm

az31mfrm2#

除了@gwcodes写的send之外,还有evalcall

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 postcallsend快一点。

相关问题