Проверка нулевую строку перед конкатенацией

Этот вопрос подобен БОЛЬШОМУ КОЛИЧЕСТВУ вопросов, но никаким таким способом это что-либо дубликата. Этим вопросом являются о конкатенации строк и написании лучшего кода меньше, чем это для проверки ноля/нуля.

В настоящее время я имею:

file.puts "cn: " + (var1.nil? ? "UNKNOWN" : var1)

Который хорошо работает, но не выглядит хорошим. Что является лучшим способом записать это в рубине так, чтобы я проверил на ноль и не связал его

16
задан JakeGould 14 January 2015 в 02:44
поделиться

4 ответа

Вы можете сделать это:

file.puts "cn: " + (var1 || "UNKNOWN")

или, тождественно если вы предпочитаете:

file.puts "cn: " + (var1 or "UNKNOWN")

или мой фаворит, который я думаю, самый идиоматический рубин:

file.puts "cn: #{var1 or 'unknown'}"
42
ответ дан 30 November 2019 в 15:20
поделиться

Я бы сделал то, что предложил Питер, предполагая, что false не является допустимым значением для var1 , а var1 гарантированно будет nil. или строка. Вы также можете извлечь эту логику в функцию:

def display_value(var)
  (var || "UNKNOWN").to_s # or (var.nil? ? "UNKNOWN" : var.to_s) if 'false' is a valid value
end

file.puts "cn: " + display_value(var1)

to_s необходимо только в том случае, если не гарантируется, что var1 будет нулем или строкой. В качестве альтернативы, если вы сделаете:

file.puts "cn: #{display_value(var1)}"

, он выполнит неявное to_s в результате display_value

4
ответ дан 30 November 2019 в 15:20
поделиться
file.puts( "cn:" + (var1 || "UNKNOWN" ))
1
ответ дан 30 November 2019 в 15:20
поделиться

Поскольку "cn: " часть чисто эстетическая и поэтому (в большей степени?) может быть изменена в соответствии с будущими рекомендациями по представлению, я бы рекомендовал использовать join;

file.puts(["cn", (var1 || "UNKNOWN")].join(": ")

Возможно, как функцию, как упоминалось ранее - семантика та же, изменились только имена методов/ключевые слова;

def value_or_unknown(value, attribute = nil)
  [attribute, (value or "UNKNOWN")] * ": "
end
1
ответ дан 30 November 2019 в 15:20
поделиться
Другие вопросы по тегам:

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