Php家伙对Ruby中的简单任务感到困惑

时间:2011-10-31 10:37:38

标签: ruby-on-rails ruby ruby-on-rails-3

如果未设置变量,我想设置默认值。

以下是有效值(不应覆盖): 真正 假 0 1 “一些字符串”

以下是我目前正在尝试这样做的方法。这是正确的方法吗?

  before_save :set_defaults

  def set_defaults
    self.is_approved = false if self.is_approved.nil?
  end

如果这确实是正确的,是否有更好的语法?在PHP中我们有这种东西的isset()。

2 个答案:

答案 0 :(得分:4)

这个惯用的ruby版本是写:

is_approved ||= false
如果is_approvedfalse

会将is_approved设置为falsey:这意味着nilfalse。如果false是幂等的,则设置为false,因此没有错。

否则你可以写:

is_approved = false unless is_approved.present?

与你所写的相同:

is_approved = false if is_approved.nil?

但我觉得它稍微有点可读性。 所以是的:那也是 正确的做法。

你会注意到在ruby中有很多方法可以达到同样的效果。这是程序员幸福的一部分:你选择哪种方式最适合你,并且在那个地方最具表现力(因为有时一个更适合,有时另一个)。但对于初学者来说,它有时会令人困惑:)

答案 1 :(得分:0)

如果要在未设置(nil)时设置对象的变量值并保留实际值,则可以执行更短的操作,例如:

before_save :set_defaults

def set_defaults
  self.is_approved ||= false
end