双管操作符是否有一个速记等价物,它将空字符串视为假的?

ste*_*tef 0 ruby ruby-on-rails

在Ruby中,通常使用双管道运算符来测试变量是否为假,并在未定义变量时应用某种默认设置.这是我在代码库中遇到的一行配置我正在做一些工作:

config.uh_product_name = ENV['UH_PRODUCT_NAME'] || 'Unicorn Hunt'
Run Code Online (Sandbox Code Playgroud)

这一切都很好,如果ENV["UH_PRODUCT_NAME"]是的话nil.但在这种情况下,由于.env文件默认设置的方式,ENV["UH_PRODUCT_NAME"]是一个空字符串"",这是真的.因此默认情况下不会应用.

我可以这样做来处理这种情况:

config.uh_product_name = ENV['UH_PRODUCT_NAME'].present? ? 'Unicorn Hunt' : ENV['UH_PRODUCT_NAME'] 
Run Code Online (Sandbox Code Playgroud)

但这样的可读性要低得多,最终会出现一系列可能会延伸到屏幕外的代码.

那么,有没有人知道一个速记算子沿着||应用Rails's .blank?或将空字符串视为falsy?也许这样的东西:

config.uh_product_name = ENV['UH_PRODUCT_NAME'] ?|| 'Unicorn Hunt'
Run Code Online (Sandbox Code Playgroud)

tok*_*and 8

使用Object#presence:

config.uh_product_name = ENV['UH_PRODUCT_NAME'].presence || 'Unicorn Hunt'
Run Code Online (Sandbox Code Playgroud)