【发布时间】:2021-02-09 21:54:38
【问题描述】:
我在一个对象中初始化了多个具有相同输入和输出类型的函数
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 => ...
}
【问题讨论】:
-
这在一般意义上是不可能的,函数相等是一个 NP-Hard 问题,但它们可能是微妙的解决方法。但是,需要知道你有哪个函数感觉很奇怪,这似乎是一个 XY 问题,请解释一下你究竟为什么要这样做,问题背后的元问题是什么?
-
在我的项目中,我有一组对象,其中一个值是高阶函数,该值描述了对象对某些事件发生的行为。基于这个值,我想在 GUI 中以不同的方式表示这些对象。
-
您可以创建自己的 ADT 来封装这些函数,这样您就可以对其进行模式匹配以确定您拥有的函数。
标签: scala pattern-matching higher-order-functions