2016-04-04 10 views
5

Cosa significa "&&=" nel seguente metodo?Grammatica in Ruby "&& ="

records.each do |record| 
    raise_on_type_mismatch!(record) 
    add_to_target(record) do |rec| 
    result &&= insert_record(rec, true, should_raise) unless owner. 
     new_record? 
    end 
end 

risposta

7

a &&= b è una forma breve (zucchero alias sintattico) per:

a && a = b 

Questo breve modulo è previsto per gli operatori (inclusi ma non eventualmente limitato a) +, -, /, *, % , **, ^, <<, >>, &, |, &&, || (credito s per @Stefan per la lista completa dei supported operators shortcuts):

a = 5 
a += 5 
#⇒ 10 

a = true 
a &&= true 
#⇒ true 
a &&= false 
#⇒ false 

&& è un logico e alias “conjunction” in contrasto con || che è logica o alias “disjunction.”

+2

Non sono sicuro se l'esempio di codice alla fine sia sufficientemente chiaro. Potresti descrivere in parole semplici cosa '&&' fa in opposizione a '||'? – Stefan

+0

@Stefan fatto, grazie. – mudasobwa

+1

Entrambi, '&&' e '||' sono operatori logici. Quelli binari sono '&' e '|'. – Stefan

3

Significa se il valore precedente di result è false o nil, quindi mantenerlo e saltare ulteriori chiamate insert_record, altrimenti impostare il valore di result sul valore restituito di insert_record.