Ruby/Rails使用|| 使用空字符串而不是nil值来确定值

Aks*_*hat 18 ruby ruby-on-rails

我经常这样做

 value = input || "default"
Run Code Online (Sandbox Code Playgroud)

所以如果输入= nil

 value = "default"
Run Code Online (Sandbox Code Playgroud)

但是,我怎么能做到这一点,这样不是nil这也算一个空字符串''作为nil

我希望如果我这样做

input = ''
value = input || "default"
=> "default"
Run Code Online (Sandbox Code Playgroud)

有没有一种简单优雅的方法可以做到这一点if

dim*_*uch 49

Rails将存在方法添加到完全符合您要求的所有对象

input = ''
value = input.presence || "default"
=> "default"

input = 'value'
value = input.presence || "default"
=> "value"

input = nil
value = input.presence || "default"
=> "default"
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是是_RAILS_ONLY_,“纯”红宝石没有它。 (2认同)

Pet*_*ong 5

我通常是这样做的:

value = input.blank? ? "default" : input
Run Code Online (Sandbox Code Playgroud)

针对可能未定义输入的情况,您可以通过以下方式对其进行保护:

value = input || (input.blank? ? "default" : input)
# I just tried that the parentheses are required, or else its return is incorrect
Run Code Online (Sandbox Code Playgroud)

对于纯 ruby​​(不依赖于 Rails),你可以这样使用empty?

value = input || (input.empty? ? "default" : input)
Run Code Online (Sandbox Code Playgroud)

或者像这样(感谢@substantial 提供这个)

value = (input ||= "").empty? ? "default" : input
Run Code Online (Sandbox Code Playgroud)