0

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 =」がどのように機能するのか本当にわかりません...「if root ==」であるべきではありませんか?

4

2 に答える 2

6

これは有効な Ruby です。args[:root](nil でない場合) の値を割り当て、それ以外の場合は の値を割り当てますoptions[:root]。その後、if ステートメントは変数の値を評価しますrootrootが真である (nilまたはでない) 場合、if ステートメントはパスします。そうでない場合falseは、else 句を実行します。

通常、次のようにして、これをより明確にします。

if (root = args[:root] || options[:root])
于 2013-08-15T22:00:56.340 に答える
5
if root = args[:root] || options[:root]

これは、 is notの場合に の値args[:root]を割り当てます。の場合、ルートに割り当てられます。の最終結果がでない場合、 の最初の分岐が実行されます。の場合、ブランチが取得されます。rootargs[:root]nilniloptions[:root]rootnilifnilelse

于 2013-08-15T22:00:47.523 に答える