我可以使用:
File.open('/dev/null', 'w')
在Unix系统上,但如果有一种Ruby方法可以实现这一点,我想使用它。只是寻找一个IO流,立即“破坏”所有写入,有点像一个空对象。
答案 0 :(得分:70)
如果您想要流的完整行为,最好使用:
File.open(File::NULL, "w")
请注意File::NULL
是Ruby 1.9.3的新功能;你可以使用我的backports
gem:
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
如果您愿意,也可以复制relevant code。
答案 1 :(得分:7)
有stringIO,当我想引入虚拟文件流时,我发现它很有用:
require "stringio"
f = StringIO.new
f.gets # => nil
这里有一些来自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'
答案 2 :(得分:5)
不,我不相信Ruby中有任何类似于null的流,至少在早期版本中是这样。在这种情况下,你必须自己制作一个。根据它将调用的方法,您需要编写 null流类的存根方法,如下所示:
class NullStream
def <<(o); self; end
end
以上示例并非完整。例如,某些流可能需要调用write
,puts
或其他方法。此外,应该通过在self
方法中返回<<
来实现某些方法,而不是其他方法。
答案 3 :(得分:1)
答案 4 :(得分:1)
Logger.new("/dev/null")
可以解决问题