En Scala, cualquier método el cual reciba un solo parámetro puede ser usado como un operador de infijo (infix). Aquí se muestra la definición de la clase MyBool
, la cual define tres métodos and
, or
, y negate
.
class MyBool(x: Boolean) {
def and(that: MyBool): MyBool = if (x) that else this
def or(that: MyBool): MyBool = if (x) this else that
def negate: MyBool = new MyBool(!x)
}
Ahora es posible utilizar and
y or
como operadores de infijo:
def not(x: MyBool) = x negate; // punto y coma necesario aquí
def xor(x: MyBool, y: MyBool) = (x or y) and not(x and y)
Como muestra la primera linea del código anterior, es también posible utilizar métodos nularios (que no reciban parámetros) como operadores de postfijo. La segunda linea define la función xor
utilizando los métodos and
y or
como también la función not
. En este ejemplo el uso de los operadores de postfijo ayuda a crear una definición del método xor
más fácil de leer.
Para demostrar esto se muestra el código correspondiente a las funciones anteriores pero escritas en una notación orientada a objetos más tradicional:
def not(x: MyBool) = x.negate; // punto y coma necesario aquí
def xor(x: MyBool, y: MyBool) = x.or(y).and(x.and(y).negate)
Contributors to this page:
Contents
- Introducción
- Basics
- Tipos Unificados
- Clases
- Valores de parámetros por defecto
- Parámetros nombrados
- Traits
- Tuples
- Composición de clases mixin
- Funciones de orden superior
- Funciones Anidadas
- Currying
- Clases Case
- Reconocimiento de patrones
- Singleton Objects
- Patrones basados en expresiones regulares
- Objetos Extractores
- For Comprehensions
- Clases genéricas
- Varianzas
- Límite de tipado superior
- Límite de tipado inferior
- Clases Internas
- Tipos Abstractos
- Tipos Compuestos
- Autorefrencias explicitamente tipadas
- Parámetros implícitos
- Implicit Conversions
- Métodos polimórficos
- Inferencia de tipos Local
- Operadores
- By-name Parameters
- Anotaciones
- Packages and Imports
- Package Objects