2013-12-12 2 views
1

Ruby 스크립트가 TCP/IP를 통해 R과 통신 할 수있게 해주는 rserve-client gem으로 작업하고 있습니다. 그 중 일부는 루비 객체를 직렬화하여 와이어를 통해 전송하고 루비로 돌아온 결과를 투명하게 변환하는 것을 포함합니다.이상한 루비 배열 표기법 '| WN |'?

그러나 반환 된 배열 객체는 R 테이블이 다시 Ruby로 변환 될 때 전에 본 적이없는 이상한 표기법을 가지고 있습니다. 명명 된 ID 열이

예를 들어

에 R 테이블과 3 값을 반환

res 
=> [|WN|"id"=[1, 
    2, 
    3] 
res.to_s 
=> "[id=[1, 2, 3]]" 
res.class 
=> Array 
res.inspect 
=> "#<Array:70227288405140 [id=[1, 2, 3]]>" 
res.class.ancestors == Array.ancestors 
=> true 
=> [[1, 
    2, 
    3]] 

이 무엇인지 어떤 생각? 이상 적으로는 ID를 사용하기 위해 해쉬로 변환하고 싶습니다 ... to_hash는 그것을 얻지 못합니다. .to_a의 결과는 다음과 같습니다.

답변

1

유효한 배열 표기법이 아닙니다. 나는이 보석에 대한 특별한 지식이 없지만 저자가 당신에게 거짓말을하는 절망적 인 길을 택한 것 같아요. 다음은 비슷한 동작을 표시하는 간단한 클래스입니다.

class A < Array 
    def class 
    Array 
    end 

    def inspect 
    "[|WN| blah=[1,2,3]]" 
    end 
end 

출력

foo = A.new #=> [|WN| blah=[1,2,3]] 
foo.class #=> Array 
foo.class.ancestors == Array.ancestors #=> true 

이 연습은 그것이 있어야만큼 드문 일이 아니다. ActiveRecord::Relation 적어도 비슷한 것을하기 위해 사용됩니다.