Ruby 通过管道发送的对象序列化;“命名者”;
我在ruby中使用管道,但无法通过管道发送序列化对象。 我遇到了一个“NoMethodError”,它是wierd,因为我正在发送一个结构。 我尝试添加一个函数,但是当我调用该函数时,我得到了相同的错误。 这是什么原因造成的?解决方案是什么 资料来源:Ruby 通过管道发送的对象序列化;“命名者”;,ruby,Ruby,我在ruby中使用管道,但无法通过管道发送序列化对象。 我遇到了一个“NoMethodError”,它是wierd,因为我正在发送一个结构。 我尝试添加一个函数,但是当我调用该函数时,我得到了相同的错误。 这是什么原因造成的?解决方案是什么 资料来源: reader, writer = IO.pipe #define the pair object Pair = Struct.new(:x, :y) do end #creates, serializes and sends an obj
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
注意:我从这条线索的第二个答案中得出了事情应该是什么样子的基本想法:
原因是行
reader.get
返回一个字符串,而不是ruby对象。将行obj=reader.get
更改为:
obj = Marshal.load(reader.gets)
在第一个
fork
块中,您不是在写封送对象,而是在写对象Pair.new(1,2).to_s
。它应该是writer.puts temp_str
而不是writer.puts temp如果你故意在你的结构中放入:ty
,调用#y
显然不会成功,请澄清。我并不是因为打字错误。现在正在编辑。