我注意到了这个方法,同时查看了ActiveModel :: Serializable
def as_json(args={})
if root = args[:root] || options[:root]
options[:hash] = hash = {}
options[:unique_values] = {}
hash.merge!(root => serialize)
include_meta hash
hash
else
serialize
end
end
而且我真的不知道'if root ='是如何工作的...如果root ==',它应该不是吗?
答案 0 :(得分:6)
这是有效的Ruby。它将分配args[:root]
的值(如果它不是nil),否则它将赋值options[:root]
。然后,if语句将评估变量root
的值。如果root
是真实的(不是nil
或false
),则if语句通过,否则它将执行else子句。
通常可以通过以下方式更清楚地说明:
if (root = args[:root] || options[:root])
答案 1 :(得分:5)
if root = args[:root] || options[:root]
如果args[:root]
不是root
,则会将args[:root]
的值分配给nil
。如果是nil
,则会将options[:root]
分配给root。如果root
的最终结果不是nil
,则会if
的第一个分支。如果是nil
,则会采用else
分支。