我正在使用耙子任务来接收和处理数据。红宝石散列与方法对
数据看起来像"code:value"
,其中每个代码映射到特定操作。
例如,"0xFE:0x47"
使用参数0x47
调用与0xFE
标记对应的方法。
对于可扩展性的目的,我认为这应该被映射到散列和具有下面定义的方法:
tags = Hash[0xFA => taskA, 0xFB => taskB, 0xFC => taskC]
def taskA(value)
...
end
def taskB(value)
...
end
def taskC(value)
...
end
然后,当接收到消息时,执行一个split
和调用该方法的哈希,如:
tokens = message.split(':')
tags[tokens[0]](tokens[1])
红宝石不喜欢Hash
初始化。解决这个问题的正确方法是什么?
我已经在JavaScript中使用了类似的实现:)无论哪种方式,发送方法工作得很好。 – dcarneiro
在JavaScript中,'taskA'是一个方法引用,'taskA()'是一个方法调用。在Ruby中,由于括号是可选的,因此'taskA'和'taskA()'都是方法调用。你可以使用'taskA_proc = method(:taskA)'捕获一个Proc,然后用'taskA_proc.call()'调用它,但是这通常比使用'send'更笨拙。 – tadman