Ruby Languageoperatori


Osservazioni

Gli operatori sono metodi

La maggior parte degli operatori sono in realtà solo metodi, quindi x + y sta chiamando il metodo + di x con l'argomento y , che dovrebbe essere scritto x.+(y) . Se scrivi un tuo metodo che ha il significato semantico di un determinato operatore, puoi implementare la tua variante nella classe.

Come un esempio sciocco:

# A class that lets you operate on numbers by name.
class NamedInteger
  name_to_value = { 'one' => 1, 'two' => 2, ... }

  # define the plus method
  def + (left_addend, right_addend)
    name_to_value(left_addend) + name_to_value(right_addend)
  end

  ...
end

Quando usare && vs. and , || contro or

Nota che ci sono due modi per esprimere i booleani, sia && o and , che || oppure or - sono spesso intercambiabili, ma non sempre. Ci riferiremo a queste come varianti di "carattere" e "parola".

Le varianti dei caratteri hanno una precedenza più alta, quindi riducono la necessità di parentesi in istruzioni più complesse per evitare errori imprevisti.

Le varianti di parole erano originariamente intese come operatori di flusso di controllo piuttosto che operatori booleani. Cioè, sono stati progettati per essere utilizzati in dichiarazioni di metodo concatenate:

raise 'an error' and return

Mentre possono essere usati come operatori booleani, la loro precedenza inferiore li rende imprevedibili.

In secondo luogo, molti rubyisti preferiscono la variante del carattere quando creano un'espressione booleana (una che x.nil? || x.empty? true o false ) come x.nil? || x.empty? . D'altra parte, le varianti di parole sono preferite nei casi in cui una serie di metodi sono in fase di valutazione e uno può fallire. Ad esempio, un idioma comune che utilizza la variante di parola per metodi che restituiscono nil in caso di errore potrebbe essere simile a:

def deliver_email
  # If the first fails, try the backup, and if that works, all good
  deliver_by_primary or deliver_by_backup and return
  # error handling code
end

operatori Esempi correlati