2012-06-12 77 views
0

我有一些Ruby代碼是這樣的:哈希鍵作爲方法標誌

my_hash = { 
    key1: "value", 
    key2: "value" 
} 

def key1 
    do_something 
end 

def key2 
    do_something_else 
end 

正如你所看到的鍵和方法具有相同的名稱。我現在想將散列鍵「轉換」爲方法調用,其中方法名稱是散列鍵

作爲背景,我有一個ncurses菜單,其中散列值是標籤,我只傳遞鍵。當選擇一個菜單條目時,我想執行正確的方法,而不需要太多的編碼開銷,如在if或case語句中找出哪個條目被選中。

這有可能以任何方式嗎?如果是,我該怎麼做?

這件事有點難以解釋,我希望你明白我的意思。

+0

我個人沒有明白你的意思。 –

+0

應該是什麼價值? –

+0

我想要「打印出」散列鍵「key1」,並用同樣的名稱調用該方法。值是一個菜單的標籤,但是它的值在這裏並不重要,我認爲 –

回答

1

使用send調用方法與符號的名字:

my_hash.each { |k,_| send k } 

這將調用中的散列的所有方法。你可以選擇一個,並使用send來調用它,而不是迭代。

+1

或'my_hash.keys.each {| k |發送(k)}'。 –

+0

@ KL-7 Yup!很好的選擇。 –

+0

完美!多謝。正是我想要的:) –