2012-06-12 43 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

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