2009-09-25 3 views
1

이 코드가 주어집니다 :스칼라에서 평가되지 않은 함수를 반환 할 수 있습니까?

def getFunc(funcName:String, param:Int) = match funcName { 
    case "FooFunc" => FooFunc(param) 
    [...] 
} 

def FooFunc(param:Int) = param + SomeObject.SomeVariable 

param가 적용된 FooFunc,가 계산되지 않은 을 반환하려면 어떻게해야합니까? FooFunc는 외부 변수에 의존하므로 param을 이미 적용한 상태에서 호출 할 수 있기를 원하기 때문입니다. getFunc의 반환 유형은 무엇이 필요합니까?

답변

2

지연은 호출 사이트, 스칼라에서 정의되어야합니다.

lazy val x = getFunc(...) // getFunc only gets evaluated when needed 

아니면 서명을 변경할 수 있습니다 : 당신은 할 수

def FooFunc(param:Int) =() => param + SomeObject.SomeVariable 
... 
val x = getFunc(...) // x contains a function from Unit into something 

x() // Use x here, causing the evaluation 
1

다른 void 매개 변수를 추가 할 수 있으므로 함수는이 매개 변수에 적용될 때만 평가됩니다.

비록이 경우 함수 대신 적절한 객체를 사용하고 싶지만.

1

나는 많은 옵션이 확실 해요,하지만 당신은 사용할 수 있습니다

return { Unit => FooFun(param) } 
5

쉬운 :

귀하의 방법은 좋은 이름있다
def getFunc(funcName: String, param: Int) = funcName match { 
    case "FooFunc" =>() => FooFunc(param) 
    [...] 
} 

: getFunc은 그래서 함수를 반환하도록되어 의지.

관련 문제