Как определить вспомогательные функции внутри блока def в Scala?
Я хотел бы создать helper function
внутри функции, затем вызовите helper function
и вернуть его для первоначального вызова определения функции.
Например:
def g(arg1: List[T]): List[T] = {
def h(arg1: List[T], arg2: [T]): List[T] = {
//code to call here
}
//call h with an initial value
h(arg, 12345)
}
...
...
//in main()
g(List(1,2,3)) // --> returns result of h(List(1,2,3), 12345)
Я хотел бы определить функцию внутри области действия исходной функции, так как она не имеет отношения к другим функциям в коде.
Что Scala
способ сделать это?
Есть ли совершенно другой способ создания такой же функциональности? Если так, то как?
(Я думал об этом из-за let
+ in
парадигма используется в OCaml
)
2 ответа
Решение
Scala способ сделать это:
def g(arg1: List[T]): List[T] = {
def h(arg2: T): List[T] = {
// arg1 is already available here. (closure)
//code to call here
}
//call h with an initial value
h(12345)
}
Другой способ
val h = new Function1[T, List[T]] {
def apply(arg2: T): List[T] = {
// function, arg1 is still available.
}
}
Вы можете определить локальные функции внутри других функций более или менее так, как вы написали. Например
object LocalFunctionTest {
def g(arg: List[Int]): List[Int] = {
def h(lst: List[Int], i: Int) = {
val l = lst.map(_ + i)
l :+ 3
}
h(arg, 12345)
}
}
scala> LocalFunctionTest.g(List(1,2,3))
res1: List[Int] = List(12346, 12347, 12348, 3)