我可以用:
File.open('/dev/null', 'w')
Run Code Online (Sandbox Code Playgroud)
在Unix系统上,但如果有一种Ruby方法来实现这一点,我想使用它.只是寻找一个IO流,立即"破坏"所有写入,有点像一个空对象.
Mar*_*une 74
如果你想要流的完整行为,最好的可能是使用:
File.open(File::NULL, "w")
Run Code Online (Sandbox Code Playgroud)
请注意,这File::NULL是Ruby 1.9.3的新功能; 你可以使用我的backports宝石:
require 'backports/1.9.3/file/null' # => Won't do anything in 1.9.3+
File.open(File::NULL, "w") # => works even in Ruby 1.8.6
Run Code Online (Sandbox Code Playgroud)
如果您愿意,也可以复制相关代码.
有stringIO,当我想引入虚拟文件流时,我发现它很有用:
require "stringio"
f = StringIO.new
f.gets # => nil
Run Code Online (Sandbox Code Playgroud)
这里有一些来自heckle的代码,它找到了unix和windows的位桶,稍加修改:
# Is this platform MS Windows-like?
# Actually, I suspect the following line is not very reliable.
WINDOWS = RUBY_PLATFORM =~ /mswin/
# Path to the bit bucket.
NULL_PATH = WINDOWS ? 'NUL:' : '/dev/null'
Run Code Online (Sandbox Code Playgroud)
不,我不相信Ruby中有任何类似于null的流,至少在早期版本中是这样.在这种情况下,你必须自己制作一个.根据它将调用的方法,您需要在null流类上编写存根方法,如下所示:
class NullStream
def <<(o); self; end
end
Run Code Online (Sandbox Code Playgroud)
上面的例子绝不是完整的.例如,一些流可能需要调用write,puts或其它方法.此外,一些方法应该通过返回self他们的方法来实现,比如<<,其他方法不是.
| 归档时间: |
|
| 查看次数: |
5414 次 |
| 最近记录: |