[SCALA] 스칼라 함수를 정의의이 세 가지 방법의 차이
SCALA스칼라 함수를 정의의이 세 가지 방법의 차이
= A + 1 : 동일한 함수 f (a)를 표현하는 세 가지 주어 :
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>
해결법
-
==============================
1.F1은 정수를 취해 정수를 리턴하는 함수이다.
F1은 정수를 취해 정수를 리턴하는 함수이다.
F2를 반환하는 제로 인수에 대응하는 정수 복귀 정수를 취하는 함수로하는 방법이다. (나중에 REPL F2에 입력되면, 상기 방법은 F2 호출된다).
F3은 F2와 동일하다. 당신은 그냥 형식 유추를 사용하지 않는.
-
==============================
2.클래스 내부 데프 경우에만 평가하면서, 발은 초기에 평가하고, 때마다 함수가 호출됩니다. 그 X를 볼 수 있습니다 당신이 아래의 코드에서 개체가 처음 사용될 때 평가됩니다,하지만 다시 X의 멤버에 액세스 할 때. 대조적으로, Y는 오브젝트가 인스턴스화 될 때 평가되는 것이 아니라 부재를 액세스 할 때마다 평가된다.
클래스 내부 데프 경우에만 평가하면서, 발은 초기에 평가하고, 때마다 함수가 호출됩니다. 그 X를 볼 수 있습니다 당신이 아래의 코드에서 개체가 처음 사용될 때 평가됩니다,하지만 다시 X의 멤버에 액세스 할 때. 대조적으로, Y는 오브젝트가 인스턴스화 될 때 평가되는 것이 아니라 부재를 액세스 할 때마다 평가된다.
class A(a: Int) { val x = { println("x is set to something"); a } def y = { println("y is set to something"); a } } // Prints: x is set to something val a = new A(1) // Prints: "1" println(a.x) // Prints: "1" println(a.x) // Prints: "y is set to something" and "1" println(a.y) // Prints: "y is set to something" and "1" println(a.y)
-
==============================
3.이러한 DEF X = E로서 정의 실행
이러한 DEF X = E로서 정의 실행
from https://stackoverflow.com/questions/3646756/differences-between-these-three-ways-of-defining-a-function-in-scala by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 어떻게 스칼라를 사용하여 아파치 스파크에 PostgreSQL 데이터베이스에 연결할 수 있습니까? (0) | 2019.11.14 |
---|---|
[SCALA] 스칼라리스트의 말미에 부가 된 요소 (0) | 2019.11.14 |
[SCALA] 포스트 그레스 표에 Dataframes UPSERT 불꽃 (0) | 2019.11.14 |
[SCALA] 스칼라 파일에서 jar 파일 만들기 (0) | 2019.11.14 |
[SCALA] 자원 스칼라 폴더에서 어떻게 파일을 읽을? (0) | 2019.11.14 |