Ruby:为IO对象设置输出分隔符

时间:2017-02-20 10:07:34

标签: ruby

(交叉发布说明:https://www.ruby-forum.com/topic/6879239已经提出此问题而未收到回复)

来自IO#print的文档:

"将给定对象写入ios。 ...如果输出记录分隔符 ($\)不是nil,它将附加到输出中。"

如果我从字面上理解,这意味着我只能输出一个 所有流的分隔符($\)。但总的来说,我有几个流 开放写作。如何为它们设置不同的输出分隔符?

2 个答案:

答案 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