测试空值或零值字符串

Ric*_*own 86 ruby ruby-on-rails

我试图在Ruby中有条件地设置变量.如果变量为nil或空(0长度字符串),我需要设置它.我想出了以下内容:

variable = id if variable.nil? || (!variable.nil? && variable.empty?)
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但它对我来说似乎不像Ruby.表达上述内容的方式是否更为简洁?

Jon*_*ier 176

第二个条款不需要!variable.nil?检查 - 如果评估到达那一点,variable.nil则保证是错误的(因为短路).

这应该足够了:

variable = id if variable.nil? || variable.empty?
Run Code Online (Sandbox Code Playgroud)

如果你正在使用Ruby on Rails,Object.blank?解决了这个问题:

如果对象为false,空或空白字符串,则该对象为空.例如""," ",nil,[],和{}都是空白.

  • 完美,这就是我所需要的(`Object.blank`).Ruby和Rails总是让我感到惊讶,因为它像傻瓜一样禅.谢谢!:) (4认同)
  • 如果你不在Rails中,你可以直接为Object.blank挑选[activesupport](http://rubygems.org/gems/activesupport)gem. (3认同)
  • 这假设@RichardBrown不会意外地将整数放在他期望的字符串变量中,是的. (2认同)

小智 53

如果你在Rails .blank?应该是您正在寻找的方法:

a = nil
b = []
c = ""

a.blank? #=> true
b.blank? #=> true
c.blank? #=> true

d = "1"
e = ["1"]

d.blank? #=> false
e.blank? #=> false
Run Code Online (Sandbox Code Playgroud)

所以答案是:

variable = id if variable.blank?
Run Code Online (Sandbox Code Playgroud)

  • 有用:`" ".空白?#=> 正确` (3认同)

saw*_*awa 23

variable = id if variable.to_s.empty?
Run Code Online (Sandbox Code Playgroud)