【问题标题】:Testing for empty or nil-value string [duplicate]测试空值或零值字符串[重复]
【发布时间】:2013-04-13 14:39:49
【问题描述】:

我正在尝试在 Ruby 中有条件地设置一个变量。如果变量为 nil 或为空(0 长度字符串),我需要设置它。我想出了以下几点:

variable = id if variable.nil? || (!variable.nil? && variable.empty?)

虽然它可以工作,但对我来说似乎不太像 Ruby。是不是更简洁的表达方式?

【问题讨论】:

  • “Ruby 方式”是不要进入一个混合有 nil 和空字符串的状态。如果返回此数据的任何函数都可以返回“空”值,则它应该返回nil,而不是""

标签: ruby-on-rails ruby


【解决方案1】:

第二个子句不需要!variable.nil? 检查——如果评估达到那个点,variable.nil 保证为假(因为short-circuiting)。

这就足够了:

variable = id if variable.nil? || variable.empty?

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

如果对象为假、空或空白字符串,则该对象为空。例如,""" "nil[]{} 都是空白的。

【讨论】:

  • 完美,这就是我所需要的 (Object.blank)。 Ruby 和 Rails 的禅宗般的简洁性总是让我感到惊讶。谢谢! :)
  • 此解决方案不适用于variable = 3 p variable = 5 if variable.nil? || variable.empty?
  • 这是假设@RichardBrown 不会意外地将整数放入他期望的字符串变量中,是的。
  • 不,它是 ActiveRecord 对象的字符串属性。我应该指定的,抱歉。
  • 如果您不在 Rails 中,您可以直接为 Object.blank 挑选 activesupport gem?。
【解决方案2】:

如果您在 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

所以答案是:

variable = id if variable.blank?

【讨论】:

  • 有用:" ".blank? #=> true
【解决方案3】:
variable = id if variable.to_s.empty?

【讨论】:

  • 好了!在nil"" 上都能干净地工作。也很好读!
猜你喜欢
  • 2020-06-10
  • 2011-10-14
  • 2016-03-27
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2020-12-05
相关资源
最近更新 更多