好吧,这可能真的很疯狂,和/或愚蠢但是......
我正在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的未定义方法。
我正在尝试做什么有意义还是有更好的方法来做到这一点?如果这样做的方式有意义..为什么它会返回那个错误?
答案 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])