Почему scala не может передать имя функции напрямую в val? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть этот код скалы:

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

почему в скале я не могу просто написать

val d=sum

1 Ответ

3 голосов
/ 13 июня 2019

Scala имеет

  • методы (по умолчанию def это метод) и
  • функции

И они не одинаковы.

Взяв в качестве примера java-методы, вы не можете назначать методы переменной без оценки метода.Но вы можете сделать это с помощью функции, и для этого в scala определите sum как функцию.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...