데이터를 받고 처리하는 데 rake 태스크를 사용하고 있습니다.쌍의 메소드가있는 루비 해시
데이터는 "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에서 비슷한 구현을 사용하고있다 : 어느 쪽이든, send 메소드는 훌륭하게 작동했다. – dcarneiro
JavaScript에서'taskA'는 메소드 참조이고'taskA()'는 메소드 호출입니다. 루비에서는 대괄호가 선택적이므로'taskA'와'taskA()'는 모두 메소드 호출입니다. 'taskA_proc = method (: taskA)'를 사용하여 Proc를 캡쳐 한 다음'taskA_proc.call()'을 사용하여 나중에 호출 할 수는 있지만 보통'send'를 사용하는 것보다 더 어색합니다. – tadman