Ruby/Rails с использованием || для определения значения, используя пустую строку вместо значения nil
Я обычно делаю
value = input || "default"
поэтому, если input = nil
value = "default"
Но как я могу это сделать, а вместо nil
Он также считает пустую строку ''
как nil
Я хочу, чтобы, если я делаю
input = ''
value = input || "default"
=> "default"
Есть ли простой элегантный способ сделать это без if
?
Ответы
Ответ 1
Rails добавляет метод presence ко всему объекту, который делает именно то, что вы хотите
input = ''
value = input.presence || "default"
=> "default"
input = 'value'
value = input.presence || "default"
=> "value"
input = nil
value = input.presence || "default"
=> "default"
Ответ 2
Я обычно делаю так:
value = input.blank? ? "default" : input
В ответ на случай, что ввод не может быть определен, вы можете защитить его:
value = input || (input.blank? ? "default" : input)
# I just tried that the parentheses are required, or else its return is incorrect
Для чистого рубина (не зависит от Rails) вы можете использовать empty?
value = input || (input.empty? ? "default" : input)
value = (input ||= "").empty? ? "default" : input # thanks gg_s for providing this
Ответ 3
Возможно, неважно, но я бы использовал highline следующим образом:
require "highline/import"
input = ask('Input: ') { |q| q.default = "default" }
Он работает без Rails. Действительно аккуратное решение.