Я мог бы использовать:
File.open('/dev/null', 'w')
в Unix-системах, но если есть способ Ruby для этого, я бы хотел его использовать. Просто ищет поток ввода-вывода, который сразу же "уничтожает" все записи, вроде нулевого объекта.
Я мог бы использовать:
File.open('/dev/null', 'w')
в Unix-системах, но если есть способ Ruby для этого, я бы хотел его использовать. Просто ищет поток ввода-вывода, который сразу же "уничтожает" все записи, вроде нулевого объекта.
Нет, я не думаю, что в Ruby есть что-то вроде пустого потока, по крайней мере в более ранних версиях. В этом случае вы должны сделать это самостоятельно. В зависимости от методов, которые он вызовет, вам нужно будет написать stub в классе нулевого потока, например:
class NullStream
def <<(o); self; end
end
Приведенный выше пример не является полным. Например, для некоторых потоков может потребоваться вызов write
, puts
или других методов. Кроме того, некоторые методы должны быть реализованы путем возврата self
в свои методы, например <<
, другие - нет.
Если вам требуется полное поведение потоков, лучше всего использовать:
File.open(File::NULL, "w")
Обратите внимание, что 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
Вы также можете скопировать соответствующий код, если хотите.
Здесь 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'
Там драгоценный камень называется devnull
Ruby реализация нулевого файла (например,/dev/null на Un * x, NUL on Windows)
Он не взаимодействует с нулевым файлом, но вместо этого имеет фиктивные методы для всех методов, которые реализуют объекты IO.
Logger.new("/dev/null")
делает трюк