我有这个Scala代码:
object C extends App{
def sum(a:Int,b:Int,c:Int)=a+b+c
//val d=sum
val d=sum _
println(d(1,2,3))
}
我必须写总和_,而不是总和
但是在f#中,我可以这样写:
let sum a b c=a+b+c
let d=sum
[<EntryPoint>]
let main argv =
printfn "%A" (d 1 2 3)
0 // return an integer exit code
为什么在Scala中我不能只写
val d=sum
答案 0 :(得分:3)
Scala有
def
是一种方法)和他们不一样。
以Java方法为例,您不能在不评估方法的情况下将方法分配给变量。但是您可以使用function来实现,并在scala中实现将sum
定义为function。
scala> def sum: (Int, Int, Int) => Int = (a, b, c) => a + b + c
sum: (Int, Int, Int) => Int
scala> val sumVal = sum
sumVal: (Int, Int, Int) => Int = $$Lambda$912/0x0000000801667840@716f94c1
scala> sumVal(1, 2, 3)
res1: Int = 6
定义函数的长版本为
scala> def sum = new Function3[Int, Int, Int, Int] {
| def apply(a: Int, b: Int, c: Int): Int = a +b + c
| }
sum: (Int, Int, Int) => Int
scala> val sumVal = sum
sumVal: (Int, Int, Int) => Int = <function3>
scala> sumVal(1, 2, 3)
res2: Int = 6