私はデータを受け取り、処理するためにレーキタスクを使用しています。ペアのメソッドを含むrubyハッシュ
データは"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])
RubyではHash
の初期化が嫌いです。この問題を解決する正しい方法は何ですか?
私は既にJavaScriptで同様の実装を使用しています:)どちらの方法でも、sendメソッドはうまくいきました。 – dcarneiro
JavaScriptでは、 'taskA'はメソッド参照であり、' taskA() 'はメソッド呼び出しです。 Rubyでは、大括弧はオプションであるため、 'taskA'と' taskA() 'はどちらもメソッド呼び出しです。 'taskA_proc = method(:taskA)'を使ってProcを捕捉し、 'taskA_proc.call()'で後で呼び出すことができますが、これは 'send'を使うよりも通常は面倒です。 – tadman