什么时候'='可以在Ruby / Rails中'if'之后使用?

时间:2013-08-15 21:56:24

标签: ruby-on-rails ruby

我注意到了这个方法,同时查看了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 ==',它应该不是吗?

2 个答案:

答案 0 :(得分:6)

这是有效的Ruby。它将分配args[:root]的值(如果它不是nil),否则它将赋值options[:root]。然后,if语句将评估变量root的值。如果root是真实的(不是nilfalse),则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分支。