我想知道IO
在 Ruby 中使用对象的正确“合同”或最佳实践。
我有一堆传递 IO 对象的辅助方法。目前,对于消耗 IO 对象的低级方法,我确保rewind
在执行read
. 这感觉很好;它允许我多次调用这些方法而不必担心修改IO
对象。
以下是合同的一些可能性:
如上所述......如果一个方法调用
read
一个IO
对象 - 或以另一种方式从它读取 - 那么它应该rewind
在完成后。这有效地将IO
对象恢复到其原始状态。这是由不修改参数的 Ruby 约定所激发的。调用方法应该知道低级方法正在调用
read
,并进行相应的调整。(换一种说法:消费者当心!)
如果有的话,哪个最好?为什么?
(一个快速的旁注:io_copy = io.dup
功能不一样io.rewind
。)
而且...如果您谈论线程安全,您应该得到加分!