2014-02-05 3 views
0

루비에서 파이프를 사용하고 있으며 파이프를 통해 직렬화 된 객체를 보내지 못했습니다. 구조체를 보내므로 "NoMethodError"가 발생했습니다. 함수를 추가하려고했지만 함수를 호출 할 때 같은 오류가 발생합니다. 이 문제의 원인은 무엇이며 해결책은 무엇입니까?"NoMethodError"파이프를 통해 객체 직렬화 전송

출처 :

reader, writer = IO.pipe 

#define the pair object 
Pair = Struct.new(:x, :y) do 
end 

#creates, serializes and sends an object 
fork do 
    temp = Pair.new(1, 2) 
    temp_str = Marshal.dump(temp) 
    writer.puts temp_str 
end 

#prints it's contents 
fork do 
    obj = reader.gets 
     puts obj.x 
     puts obj.y 
end 

참고 : 나는 일이이 글의 두 번째 대답에서 볼 방법의 기본 개념을했다 : Marshal (Ruby) pipes: sending serialized object to child processes

+0

의도적으로 구조체에': ty'를 넣으면 '# y'에 대한 호출이 성공하지 못한다는 것이 명백해 보입니다. 명확히하십시오. – Patru

+0

나는 오타가 아니 었습니다. 그것은 지금 편집됩니다. – Bloodcount

답변

0

이유는 그 문자열을 반환 reader.gets 라인과 루비 오브젝트가 아닙니다. 에 선 obj = reader.gets 변경 :

obj = Marshal.load(reader.gets) 

그리고 처음 fork 블록에, 당신은 정렬 화 된 객체하지만 객체 Pair.new(1,2).to_s를 작성하지 않았다. writer.puts temp 대신 writer.puts temp_str이어야합니다.