동일한 기능을 표현하는 세 가지 방법이 주어집니다 f(a) := a + 1
.
val f1 = (a:Int) => a + 1
def f2 = (a:Int) => a + 1
def f3:(Int => Int) = a => a + 1
이러한 정의는 어떻게 다릅니 까? REPL은 명백한 차이점을 나타내지 않습니다.
scala> f1
res38: (Int) => Int = <function1>
scala> f2
res39: (Int) => Int = <function1>
scala> f3
res40: (Int) => Int = <function1>
@RandallSchulz val 버전에 새 함수 인스턴스가 필요하지 않다는 점을 감안할 때이 경우 왜 def를 사용합니까?
—
virtualeyes
@virtualeyes FunctionN [...] 값을 산출하는 def를 볼 수있는 유일한 상황은 combinator parser 라이브러리에 있습니다. 함수를 생성하는 메서드를 작성하는 것은 그리 일반적이지 않으며 의미 적으로 / 기능적으로 변경되지 않는 함수의 많은 복사본을 생성하기 위해 def를 사용하지 않을 것입니다.
—
Randall Schulz
f1
값이 정적으로 바인드 된 REPL 쇼에서f1
평가하는 동안f2
및f3
결과 표시 를 호출 하는 방법을. 특히 새Function1[Int, Int]
인스턴스는f2
또는f3
호출 될 때마다 생성 되지만 영원히f1
동일Function1[Int, Int]
합니다.