尝试使用函数作为方法的参数。举个简单的例子,让我们使用:
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")
)
我想将函数传递给类似的东西:
def getIntegrationOption(ARG) = {
availableOptions.find(ARG)
}
ARG可能是:
x => x.id == Option(id)
或
x => x.name == "blah1"
想法?思考?
答案 0 :(得分:5)
您所要做的就是声明一个函数参数,然后您可以像使用任何其他函数一样使用该参数,或将其传递给更高阶函数,如find
:
def getIntegrationOption(f: IntegrationOption => Boolean) = {
availableOptions.find(f)
}
getIntegrationOptions(x => x.name == "blah1")
//or you could do just
getIntegrationOptions(_.name == "blah1")
答案 1 :(得分: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 io@IntegrationOption(_, "blah2", _) => io
}