迭代哈希时调用函数

时间:2011-12-12 19:15:26

标签: ruby

好吧,这可能真的很疯狂,和/或愚蠢但是......

我正在Ruby中编写一个ircbot来学习该语言,我想在机器人中包含一个命令调度程序。

所以让我们说我有一个哈希来定义哪个命令属于哪个函数:

hash = { ".voice" => "basic", ".op" => "basic" }

然后我这样做:

hash.each_pair do |k,v|
 case content[0]
  when k then v(content[1])
 end
end

其中content [0]为“.voice”,内容[1]为正在表达的人。

这会产生一个错误,告诉我v是main:Object的未定义方法。

我正在尝试做什么有意义还是有更好的方法来做到这一点?如果这样做的方式有意义..为什么它会返回那个错误?

2 个答案:

答案 0 :(得分:1)

假设您有一个方法,并且该方法的名称在字符串中:

def basic(v)
  puts v
end

method_name = 'basic'

如果你这样做:

method_name('Hello')

你会收到错误

undefined method `method_name' for main:Object (NoMethodError)

您必须将字符串转换为方法对象才能使用它:

method_object = method(method_name)
method_object.call('Hello!')

答案 1 :(得分:1)

更改...

 v(content[1])

为...

 send(v, content[1])