26

我通常会

 value = input || "default"

所以如果输入 = nil

 value = "default"

但是我怎么能这样做而不是nil它也将一个空字符串计''nil

我想要这样,如果我这样做

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

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

4

3 回答 3

65

Rails向所有执行您想要的操作的对象添加了存在方法

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

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

input = nil
value = input.presence || "default"
=> "default"
于 2013-01-19T14:36:56.250 回答
6

我通常这样做:

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)

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

value = (input ||= "").empty? ? "default" : input
于 2013-01-19T14:30:55.367 回答
0

也许无关紧要,但我会像这样使用高线:

require "highline/import"

input = ask('Input: ') { |q| q.default = "default" }

它可以在没有 Rails 的情况下工作。真正巧妙的解决方案。

于 2015-05-18T09:14:52.523 回答