2011-09-08 7 views
6

Como seguimiento a: scala loan pattern, optional function paramCómo sobrecargue función Scala aplicar métodos

¿Cómo sería la sintaxis correcta sea para mover el parámetro withLoaner a aplicar métodos sobrecargado? Intenté varias versiones de lo siguiente sin éxito. Además, cualquier idea sobre mi error conceptualmente es muy apreciada.

def withLoaner = new { 
    def apply(n:Int, op: Int => String):String = (1 to n).map(op).mkString("\n") 
    def apply(n:Int, op:() => String):String = apply{n, i:Int => op()} // no compile 
    def apply(op:() => String):String = apply{1, i:Int => op()} // no compile 
} 
+0

goind un paso más allá, sólo tiene que tener tres métodos withLoaner: def withLoaner (n, Int, opt: Int => String): String = ... y los otros dos. –

Respuesta

11

Al pasar múltiples parámetros, debe utilizar paréntesis alrededor de ellos. Usar {} solo funciona para parámetros individuales.

Además, al usar literales de funciones, si especifica el tipo, debe poner todos los parámetros de las funciones entre paréntesis.

Así,

def withLoaner = new { 
    def apply(n:Int, op: Int => String):String = (1 to n).map(op).mkString("\n") 
    def apply(n:Int, op:() => String):String = apply(n, i => op()) // no type on i 
    def apply(op:() => String):String = apply(1, (i: Int) => op()) // parenthesis around parameters 
} 
3

2 pequeños cambios:

  • Uso ( en lugar de { al llamar apply:

    aplican (.......)

  • Uso ( alrededor de la arg a una función implícita:

    solicitud (1, (i: int) => op())

+3

No hay nada implícito aquí. –

Cuestiones relacionadas