2016-09-23 8 views
0

Я новичок в Scala. импортировать функцию из другого языка виртуальной машины Java и помощник показывает мне эту подписьпередать анонимную функцию как параметр

enter image description here

Это путает меня. В оригинальном языке я разработал эту функцию, чтобы работать как этот

dsl { 
    method { } 
    header { } 
} 

Но как это будет выглядеть в Scala?

В другом языке dsl выглядит как этот

class GRLMessageDSL : GRLMessage() { 

    fun dsl(closure: GRLMessageDSL.() -> Unit) : GRLMessage { 
     closure() 
     return this 
    } 

    fun method(closure: GRLMessageDSL.() -> GRLProtocol.GRLMethod) : GRLMessage { 
     methodType = closure() 
     return this 
    } 

    fun headers(closure: GRLMessageDSL.() -> Unit) : GRLMessage { 
     closure() 
     return this 
    } 

    fun header(closure: GRLMessageDSL.() -> Pair<String, String>) : GRLMessage { 
     headerMap += closure() 
     return this 
    } 

    fun multipart(closure: GRLMessageDSL.() -> IGRLMultipart) : GRLMessage { 
     multipartObject = closure() 
     return this 
    } 

ответ

0

функции Anonymous или лямбда с одним входным параметром будет скомпилирован в Function1 интерфейс в Scala вот почему вы видите Function1

Это означает, что

val f = {x: Int => x * x } (this is just syntactic suger) 

вышеуказанная функция эквивалентна (фактически скомпилирована)

new Function1[Int, Int] { def apply(x: Int) = x * x } 

Scala РЕПЛ

scala> val f = {x: Int => x * x } 
f: Int => Int = <function1> 

scala> new Function1[Int, Int] { def apply(x: Int) = x * x } 
res1: Int => Int = <function1> 
+0

Так как его использование будет выглядеть в Scala? – lapots

+0

'val f = {x: Int => x * x}' является синтаксическим suger для 'new Function1 [Int, Int] {def apply (x: Int) = x * x}'. Так intellij показывает второй – pamu

+0

Я имею в виду 'new GRLMessageDSL(). Dsl {???? } ' – lapots

Смежные вопросы