2015-03-07 4 views
7

Ho un codiceQual è lo scopo delle parentesi del doppio metodo in Scala?

object App { 
    def main(args: Array[String]) = print {CL().f()()()} 
} 

case class CL() { 
    def f()()() = 1 
} 

Si può vedere c'è una chiamata di metodo f()()(). Ma se eseguo f() restituisce lo stesso risultato.

Quindi qual è la differenza tra f()()() e f() in Scala?

risposta

10

In Scala, i metodi possono avere più elenchi di parametri:

def f(x: Int)(y: Int, z: String)(w: Boolean) = "foo" 
f(1)(2, "bar")(true) //returns "foo" 

più elenchi dei parametri sono utili per diversi motivi. Puoi leggere di più su di loro sulla domanda this.

anche in Scala, un elenco di argomenti vuoto può essere facoltativamente omessa:

def f() = "foo" 
f //returns "foo" 

La scelta di utilizzare un elenco di parametri vuoto è generalmente regolato per convenzione, come spiegato in this questione.

Quindi, se si dispone di più elenchi di argomenti vuoti, è possibile omettere qualsiasi di essi:

def f()()() = "foo" 
f()()() //returns "foo" 
f()() //returns "foo" 
f() //returns "foo" 
f //returns "foo" 
+0

È un accattivarsi? – barbara

+0

Sì, più elenchi di parametri è una forma di elaborazione. Per saperne di più sul curry in Scala: http://www.codecommit.com/blog/scala/function-currying-in-scala –

+0

Lo leggerò, grazie. – barbara

Problemi correlati