在Scala中,我们可以:
println {"你好,世界!" }
从Scala编程'
编写此功能的目的是用花括号代替花括号 传递一个参数是为了使客户端程序员能够编写函数 花括号之间的文字。这可以使方法调用感觉更像一个 控制抽象。
这句话是什么意思?
答案 0 :(得分:4)
这只是外观和感觉的语法糖。当函数将函数作为参数时,如
def doWith[A, B](todo: A => B): B = ???
您通常必须将其称为
doWith( input => ... )
// or even
doWith({ input => ... })
在scala中,允许用curlies替换括号,所以
doWith { input =>
...
}
具有像
这样的控制结构的外观和感觉if (...) {
...
}
Imho,这使得调用更高阶函数(如'map'或'collect')更具可读性:
someCollection.map { elem =>
...
...
}
与
基本相同someCollection.map({ elem =>
...
...
})
少了字符。
答案 1 :(得分:3)
“控制抽象”例如是if
,while
等。所以你可以写一个函数
def myIf[A](cond: Boolean)(ifTrue: => A)(ifFalse: => A): A =
if (cond) ifTrue else ifFalse
(如果您不熟悉: => Type
语法,请搜索“按名称参数”),您可以将其称为
val absX = myIf(x < 0) { -x } { x }
它看起来与普通if
调用非常相似。当然,当您编写的函数与现有控件结构更加不同时,这会更有用。
答案 2 :(得分:0)
除了(常规)函数和按名称参数外,大括号还有助于部分函数:
processList(l) {
case Nil => ...
case h :: t => ...
}
和表达序列:
doSomething {
thing1;
thing2
}
请注意,(thing1; thing2)
不是Scala中的有效表达式,例如ML。
答案 3 :(得分:0)
实际上我注意到花括号{}和括号()之间的区别在于你可以在花括号中写出多行。在括号()中,例如,你不能写一行以上。
val x :[List[Int]]=List(1,2,3,4,5,6,7,8)
x.map(y=> y*5) //it will work fine
x.map(y=>
case temp:Int=>println(temp)
case _ => println(“NOT Int”)) //it will not work
x.map{y=>
case temp:Int=>println(temp)
case _ => println(“NOT Int”)} //it willwork
所以我们可以说它只是合成糖,允许开发人员写出更多,然后没有;这就是它可能还有其他一些原因。