2012-02-15 5 views
1

메서드를 함수의 인수로 사용하여 머리를 쓰려고합니다. 간단한 예를 들어,하자의 사용을 위해 :스칼라 - 함수를 인수로 사용하는 메서드

def getIntegrationOption(ARG) = { 
    availableOptions.find(ARG) 
} 

는 ARG가 될 수 있습니다 :

x => x.id == Option(id) 

또는

x => x.name == "blah1" 

case class IntegrationOption(id: Option[Long], name: String, iconUrl: String) 

val availableOptions = List(
    IntegrationOption(Some(1), "blah1", "dsaadsf.png"), 
    IntegrationOption(Some(2), "blah2", "dsaadsf.png") 
) 

나는 이런 일에 함수에 전달하려는

아이디어? 생각?

답변

5

이 작동합니다 :

를 다음과 같이
def getIntegrationOption(predicate: IntegrationOption => Boolean) = 
    availableOptions.find(predicate) 

이제 당신은 그것을 사용할 수 있습니다

getIntegrationOption(_.iconUrl == "dsaadsf.png") 

IntegrationOption이 경우 클래스가 이미 있기 때문에, 당신은 패턴 매칭 및 부분적으로 적용 기능 검색 일부 애호가 할 수 있습니다 :

availableOptions.collectFirst{ 
    case IntegrationOption(Some(1), name, _) => name 
} 

또는 :

availableOptions.collectFirst{ 
    case [email protected](_, "blah2", _) => io 
} 
5

당신은 함수의 매개 변수를 선언한다 할 일은, 당신은 다른 기능과 같은 매개 변수를 사용하거나 find 같은 고차원 함수에 전달할 수 있습니다

def getIntegrationOption(f: IntegrationOption => Boolean) = { 
    availableOptions.find(f) 
} 
getIntegrationOptions(x => x.name == "blah1") 
//or you could do just 
getIntegrationOptions(_.name == "blah1") 
+0

이 큰 대답이 너무. 두 가지 정답을 설정할 수 있습니까? –

관련 문제