我是Scala的新手。 我从另一个JVM语言导入函数,帮助器向我显示这个签名
让我感到困惑。 在原始语言中,我设计的功能就像这样工作
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 :(得分:0)
带有一个输入参数的匿名函数或lambda被编译到Scala中的Function1
接口,这就是为什么你看到Function1
这意味着
val f = {x: Int => x * x } (this is just syntactic suger)
上述函数相当于(实际编译为)
new Function1[Int, Int] { def apply(x: Int) = x * x }
Scala REPL
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>