2009-10-23 2 views
7

나는 스칼라을 배우고 난 나중에 평가하기 위해 VAR의 기능을 저장하기 위해 노력하고있어 :스칼라 : var에 함수를 "저장"하는 방법?

var action:() => Any =() => {} 
def setAction(act: => Any) { 
    action = act 
} 

을하지만 컴파일되지 않습니다 :

error: type mismatch;
found: Any
required:() => Any
action = act

를 따라서 나에게 보인다 그것은 action = act에서 함수를 할당하는 대신 그것을 평가하고 결과를 할당합니다.
평가하지 않고 함수를 할당하는 방법을 찾을 수 없습니다.

감사합니다.

답변

15

참고 유형 "() => 모든"은 이름 매개 변수 "=> 임의"와 동일하지 않습니다. "() => Any는 매개 변수를 사용하지 않고 Any를 반환하는 함수입니다. 반면 by-name 매개 변수"=> Any "는 매개 변수가 사용될 때까지 실행을 지연하고 Any를 반환합니다. 난 당신이 매개 변수 선언은 잘못이라고 생각

var action:() => Any = null 

def setAction(act: => Any) = action =() => act 

setAction(println("hello")) // does not print anything 

action() // prints "hello" 

setAction(123) 

action() // returns 123 
+0

감사 월터, 조금 더 이해하는 나에게 많은 도움 당신은 단순히 나중에 사용하기 위해 VAR의 기능을 저장하려는 경우 당신이 원하는 아마 스칼라 – Damian

2

:

그래서 당신이해야 할 일을 다음이다. 다음

def setAction(act:() => Any) { 
    action = act 
} 

과 :

scala> def p() { println("hi!") } 
p:()Unit 

scala> setAction(p) 

scala> action() 
hi! 
res2: Any =()