Есть ли что-то вроде нуль-потока в Ruby? - PullRequest
25 голосов
/ 30 декабря 2011

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

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

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

Ответы [ 4 ]

71 голосов
/ 30 декабря 2011

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

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

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

8 голосов
/ 10 апреля 2012

Есть 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'
5 голосов
/ 30 декабря 2011

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

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

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

1 голос
/ 22 мая 2014

Существует гем под названием devnull

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...