如果未设置变量,我想设置默认值。
以下是有效值(不应覆盖): 真正 假 0 1 “一些字符串”
以下是我目前正在尝试这样做的方法。这是正确的方法吗?
before_save :set_defaults
def set_defaults
self.is_approved = false if self.is_approved.nil?
end
如果这确实是正确的,是否有更好的语法?在PHP中我们有这种东西的isset()。
答案 0 :(得分:4)
这个惯用的ruby版本是写:
is_approved ||= false
如果is_approved
为false
,会将is_approved
设置为falsey
:这意味着nil
或false
。如果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