Сценарий для выполнения против stdin, если никакой аргумент; иначе входной файл =ARGV [0]

Это работает вполне приятно - просто задался вопросом, существуют ли какие-либо улучшения для сокращения его?

if (ARGV[0].nil?) then
    input=$<
else
    input=File.new(ARGV[0],"r");
end

...
# Do something with the input here, for example:
input.each_line do |line|
    puts line
end
7
задан Phrogz 1 September 2013 в 03:31
поделиться

3 ответа

[

] Первые пять строк можно исключить полностью.[

] [

]С Pickaxe[

] [
] [

]$<: Объект, обеспечивающий доступ к конкатенация содержания все файлы, заданные в командной строке аргументы или $stdin (в случае, если нет никаких аргументов). $<поддерживает методы, похожие на объект "Файл": бинмод, закрыть, закрыть? Каждый, each_byte, each_line, eof, eof?, файл, Филено, Филено, Гетс, Гетс, Линено, lineno=, path, pos, pos=, read, readchar, readline, readline, rewind, искать, пропускать, говорить, к_а, к_и, к_йо, to_s, наряду с методами в Неисчислимо. Файл метода возвращает Файловый объект для файла в настоящее время читают. Это может измениться на $< просматривает файлы по команде Линия. [r/o][

] [
] [

] Поэтому:[

] [
print $<.read
] [

]Kernel.gets - сокращение от $<.gets, поэтому:[

] [
while s = gets
  puts s
end
]
18
ответ дан 6 December 2019 в 07:50
поделиться
[

] Только [] ARGV ?[] работает на меня, [] "r"[] обычно по умолчанию, поэтому может пропустить его, и [] Файл. new()[] может быть таким же как []File()[], так что[

] [
input = ARGV ? $< : File.new(ARGV[0])
]
3
ответ дан 6 December 2019 в 07:50
поделиться

затем и ; опционально

также можно использовать тернарный оператор:

input = ARGV[0].nil? ? $< : File.new(ARGV[0],"r")
2
ответ дан 6 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: