2014-09-11 4 views
0

Есть ли способ, чтобы сделать тест файл в случае заявления, я хочу что-то вроде:тест файла внутри сазе рубин

case ARGV[0] 
when File.exist? 
    puts "File exists!" 
when "" 
    puts "No argument" 
end 

Это не похоже на работу, хотя.

+0

Если это логическое значение, я не вижу причин, чтобы использовать 'case' заявление, и по крайней мере одна из причин этого не делать. Операторы 'case' подразумевают выбор из произвольно длинного списка опций, которых здесь нет. –

ответ

1

Вот расстройство того, что делает case:

case ARGV[0] 
when File.exist?(ARGV[0]) # Note proper syntax for File.exist? 
    puts "File exists!" # Do this if value of ARGV[0] == result of File.exist? 
when "" 
    puts "No argument" # Do this if value of ARGV[0] == "" 
end 

Очевидно, что это не будет работать, если ARGV[0] не является пустым. Кроме того, он все равно будет выполнять File.exist?(ARGV[0]) независимо от значения ARGV[0], поэтому он не делает, как вы, вероятно, собираетесь.

Я предположив, что Вы желаете, чтобы проверить, существует ли файл после зная аргумент не ноль или пустым:

if ARGV[0] and not ARGV[0].empty? 
    puts "File exists!" if File.exist?(ARGV[0]) 
else 
    puts "No argument" 
end 

Если ARGV[0] имеет значение, но файл не существует, то до сих пор нет вывод. Я не знаю, предназначено ли это на основе вашего вопроса, поскольку вы не выразили намеренное поведение.

Вы также могли бы сделать что-то вроде этого:

case ARGV[0] 
when "", nil 
    puts "No argument" 
else 
    puts "File exists!" if File.exist?(ARGV[0]) 
end 
+0

'File.exist?' Требует аргумента – Stefan

+0

@Stefan действительно, это так. Извините, я немного ленился. Я просто имитировал все, что здесь было в OP, поскольку синтаксис «File.exist?» Не соответствовал основному вопросу. Но хороший улов, я обновлю соответствующим образом. – lurker

Смежные вопросы