(交叉发布说明:https://www.ruby-forum.com/topic/6879239已经提出此问题而未收到回复)
来自IO#print的文档:
"将给定对象写入ios。 ...如果输出记录分隔符
($\
)不是nil,它将附加到输出中。"
如果我从字面上理解,这意味着我只能输出一个
所有流的分隔符($\
)。但总的来说,我有几个流
开放写作。如何为它们设置不同的输出分隔符?
答案 0 :(得分:1)
是的,有一个全局记录分隔符,您不能按流设置它。
答案 1 :(得分:0)
我一直在阅读关于Procs的内容,这是一个想法(也许是牵强附会)。您可以将需要的$\
的不同值打包到Procs(维护其创建上下文)吗?您可以在属于Proc。
def stream_1_proc
$\ = <value1>
return Proc.new { puts $\ }
end
def stream_2_proc
$\ = <value2>
return Proc.new { puts $\ }
end
# it seems like this should NOT work because $\ is global,
# but it works for me in IRB
stream_1_proc.call # $\ = <value1>
stream_2_proc.call # $\ = <value2>
该解决方案不是DRY,但也许您可以将参数传递给具有$\
值的单个函数(但$\
会在调用之间被覆盖吗?)。
def stream_proc(output_separator)
$\ = output_separator
return Proc.new { puts $\ }
end