2017-04-04 57 views
0

我有一個Ruby項目,以編程方式獲取我需要訪問的哈希中的鍵的名稱。我可以訪問領域,我需要以下列方式:以編程方式在Ruby中調用屬性

current_content = entry.fields[property_name.to_sym] 

然而,似乎有些內容只能與一個屬性語法來訪問:

m.title_with_locales = {'en-US' => 'US Title', 'nl' => 'NL Title'} 

因爲我不知道「稱號「提前,我如何以編程方式撥打電話?例如:

m.${property_name}_with_locales = {'en-US' => 'US Title', 'nl' => 'NL Title'} 
+1

注意在鏈接問題中使用'public_send',並且除非你知道你爲什麼這麼做,否則不要使用'send'。 –

回答

4

您可以使用#send以編程方式訪問屬性:

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

如果您需要訪問setter和傳遞價值觀,你可以這樣做:

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

旁邊send如@ gwcodes所寫,還有,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 postcall有點比send更快。

+1

提防老基準 - 從2008年開始! :-)在最新版本的Ruby中這不是真的,'send'實際上應該更快(但我們在這裏講的是很小的差異) – gwcodes

+0

抱歉,我沒有更新自己 - )) – marmeladze

+0

不要使用'eval ''除非您絕對肯定並理解這樣做的後果(即如果有人設法注入意外的Ruby代碼,則存在引入遠程代碼執行漏洞的危險)。 –

相關問題