Я начинаю изучать немного Scala, и я в основном понимаю функции, возвращающие функции и currying , но Я видел два синтаксиса для этого, и я хотел бы лучше понять различия и, может быть, немного теории позади , что происходит.функция curriable, которая возвращает функцию в scala через '=>' и (во-вторых) через 1 список arg, за которым следует еще
В первом методе (с использованием =>
) я могу выполнить эту функцию, просто указав аргумент, связанный с переменной x
. Однако, когда я пытаюсь сделать это со вторым подходом, компилятор говорит мне, что мне нужно указать _
wild card для второго аргумента.
Я понимаю, что мне нужно сделать, но я не уверен, зачем мне это делать . Может кто-нибудь, пожалуйста, скажите мне, что компилятор Scala здесь?
Первый метод с использованием =>
def add(x:Int) = (y:Int) => x + (-y)
add: (x: Int)Int => Int
scala> def adder = add(100) // x is bound to 100 in the returned closure
adder: Int => Int
scala> adder(1)
res42: Int = 99
Второй метод с использованием одного списка ARG следует другой
scala> def add2(x:Int)(y:Int) : Int = x + y
add2: (x: Int)(y: Int)Int
scala> def adder2 = add2(100)
<console>:9: error: missing arguments for method add2;
follow this method with `_' if you want to treat it
as a partially applied function
def adder2 = add2(100)
^
scala> def adder2 = add2(100) _ // Okay, here is the '_'
adder2: Int => Int
scala> adder2(1) // Now i can call the curried function
res43: Int = 101