Подтвердить что ты не робот

Есть что-то вроде пустого потока в Ruby?

Я мог бы использовать:

File.open('/dev/null', 'w')

в Unix-системах, но если есть способ Ruby для этого, я бы хотел его использовать. Просто ищет поток ввода-вывода, который сразу же "уничтожает" все записи, вроде нулевого объекта.

4b9b3361

Ответ 1

Нет, я не думаю, что в Ruby есть что-то вроде пустого потока, по крайней мере в более ранних версиях. В этом случае вы должны сделать это самостоятельно. В зависимости от методов, которые он вызовет, вам нужно будет написать stub в классе нулевого потока, например:

class NullStream
   def <<(o); self; end
end

Приведенный выше пример не является полным. Например, для некоторых потоков может потребоваться вызов write, puts или других методов. Кроме того, некоторые методы должны быть реализованы путем возврата self в свои методы, например <<, другие - нет.

Ответ 2

Если вам требуется полное поведение потоков, лучше всего использовать:

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

Вы также можете скопировать соответствующий код, если хотите.

Ответ 3

Здесь 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'

Ответ 4

Там драгоценный камень называется devnull

Ruby реализация нулевого файла (например,/dev/null на Un * x, NUL on Windows)

Он не взаимодействует с нулевым файлом, но вместо этого имеет фиктивные методы для всех методов, которые реализуют объекты IO.

Ответ 5

Logger.new("/dev/null") делает трюк