我正在使用rserve-client gem,它允许Ruby脚本通过TCP / IP与R通信。部分原因是将Ruby对象序列化以通过线路发送,并透明地转换回Ruby的结果。
然而,返回的数组对象有一个奇怪的符号,我以前从未见过,当R表被翻译回Ruby时。
例如,具有命名id列和3个值的R表返回:
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导致:
答案 0 :(得分: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
至少用来做类似的事情。
答案 1 :(得分:1)
答案在rserve宝石来源中。 Array
已使用新的pretty_print
方法进行了修饰:
def pretty_print(q)
q.group(1,'[|WN|',']') {
...
end