Looking for ruby Answers? Try Ask4KnowledgeBase
Looking for ruby Keywords? Try Ask4Keywords

Ruby LanguageLos operadores


Observaciones

Los operadores son métodos

La mayoría de los operadores son en realidad solo métodos, por lo que x + y está llamando al método + de x con el argumento y , que se escribiría x.+(y) . Si escribe un método propio que tenga un significado semántico de un operador determinado, puede implementar su variante en la clase.

Como un ejemplo tonto:

# 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

Cuándo usar && vs. and , || vs. or

Tenga en cuenta que hay dos formas de expresar valores booleanos, ya sea && o and , y || o or - a menudo son intercambiables, pero no siempre. Nos referiremos a ellos como variantes de "carácter" y "palabra".

Las variantes de caracteres tienen mayor prioridad, por lo que reducir la necesidad de paréntesis en declaraciones más complejas ayuda a evitar errores inesperados.

Las variantes de la palabra originalmente fueron pensadas como operadores de flujo de control en lugar de operadores booleanos. Es decir, fueron diseñados para ser utilizados en declaraciones de métodos encadenados:

raise 'an error' and return

Si bien pueden utilizarse como operadores booleanos, su menor prioridad los hace impredecibles.

En segundo lugar, muchos rubyists prefieren la variante de caracteres cuando crean una expresión booleana (una que se evalúa como true o false ) como x.nil? || x.empty? . Por otro lado, las variantes de la palabra se prefieren en los casos en que se evalúan una serie de métodos , y uno puede fallar. Por ejemplo, una expresión idiomática común que usa la variante de la palabra para los métodos que devuelven nil en caso de falla podría ser:

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

Los operadores Ejemplos relacionados