Scala функция карринг (Карринг)
Карринг (Карринг) относится к оригиналу функция принимает два параметра в новой функции принимает параметр процесса. Новая функция возвращает второй параметр является оригинальной функцией параметра.
примеров
Во-первых, мы определим функцию:
def add(x:Int,y:Int)=x+y
Таким образом, когда мы применили, он должен быть использован следующим образом: добавить (1,2)
Теперь мы смотрим на эту форму изменения функции:
def add(x:Int)(y:Int) = x + y
Поэтому, когда мы применили, она должна использоваться следующим образом: добавить (1) (2), конечные результаты одинаковы 3, этот подход (процесс) называется карринг.
процесс внедрения
Добавить (1) (2) фактически функция в свою очередь, вызывает две обычные (не кэрри функции), первый вызов с использованием параметра х, возвращаемое значение типа функции, а второй параметр у вызывать эту функцию типа значение.
Первый по сути превратилась в метод:
def add(x:Int)=(y:Int)=>x+y
Тогда эта функция является то, что это значит? Прием х в качестве параметра и возвращает анонимную функцию, определение анонимной функции: прием аргумента у Int, функция тела х + у. Теперь мы называем этот метод.
val result = add(1)
Возвращает результат, значение этого результата должна быть анонимной функцией: (у: Int) => 1 + у
Так что для того, чтобы получить результаты, мы продолжаем называть результат.
val sum = result(2)
И, наконец, распечатать результат 3.
Полный пример
Ниже приведен полный пример:
object Test { def main(args: Array[String]) { val str1:String = "Hello, " val str2:String = "Scala!" println( "str1 + str2 = " + strcat(str1)(str2) ) } def strcat(s1: String)(s2: String) = { s1 + s2 } }
Реализация указанного выше кода, выход:
$ scalac Test.scala $ scala Test str1 + str2 = Hello, Scala!