问题描述
object Utils {
def f1(value: Int): Double = ???
def f2(value: Int): Double = ???
def f3(value: Int): Double = ???
}
我为这些功能列出了更高阶的值:
val x = List(Utils.f1,Utils.f2)
如何使用模式匹配来检查对象中声明的功能的哪些功能包含在x中?我想获得类似于以下代码的东西:
x(0) match {
case Utils.f1 => ...
case Utils.f2 => ...
}
解决方法
您无法与函数匹配,它没有有意义的定义相等性。
,如果您创建了f1
,f2
,f3
val
个,这将是可能的。请注意,在模式匹配时,将使用引用相等性
object Utils {
val f1: Int => Double = _ * 10.0
val f2: Int => Double = _ * 20.0
val f3: Int => Double = _ * 30.0
}
val x: Seq[Int => Double] = List(Utils.f1,Utils.f2)
import Utils._
x(0) match {
case `f1` => println(1)
case `f2` => println(2)
case `f3` => println(3)
}
如果您保留f1
,f2
,f3
def
个
object Utils {
def f1(value: Int): Double = value * 10.0
def f2(value: Int): Double = value * 20.0
def f3(value: Int): Double = value * 30.0
}
val x: Seq[Int => Double] = List(Utils.f1,Utils.f2)
val f1: Int => Double = Utils.f1
val f2: Int => Double = Utils.f2
val f3: Int => Double = Utils.f3
x(0) match {
case `f1` => println(1)
case `f2` => println(2)
case `f3` => println(3)
}
产生MatchError
。