2014-09-30 4 views
-1

Пустой массив ([]) обрабатывается как «истинный» в булевых контекстах. Есть ли какой-либо умный способ обработки пустого массива как false?Обрабатывать пустой массив как ноль в Ruby

Я хотел бы сделать простой код, в котором перечислены файлы C в текущем каталоге или «Main.c», если в каталоге нет файла C. Я могу написать, как показано ниже, но есть ли более умный способ?

Dir.glob("*.c")!=[] ? Dir.glob("*.c").join(" ") : "Main.c" 
+0

'2.1.1: 001> [] .empty? => true 'просто вызовите' empty? 'На массив, и он скажет вам, пуст ли он :) –

ответ

2

я бы написать так, избегая повторения кода, который вызывает Dir.glob несколько раз и с помощью Array#empty?:

files = Dir.glob("*.c") 
files.empty? ? 'Main.c' : files.join(' ') 

На самом деле, это кажется более последовательным:

files = Dir.glob("*.c") 
files = ['Main.c'] if files.empty? 
files.join(' ') 
-1

Если вы можете предположить, что всегда есть «Main.c» в списке результатов, вставьте его, а затем uniq список, чтобы исключить дубликаты, если они есть.

[*Dir.glob("*.c"), "Main.c"].uniq.join(" ")