scala - 如何在Scala中将类方法作为参数传递

标签 scala

假设我有一个带有一些方法的类 C

def class C {
  def f1():Int = ...
  def f2():Int = ...
}

现在我想要一个接受两个 C 实例的方法,以及一个 C 的方法,但我不知道 f1、f2 的类型是什么,也不知道如何调用它们。我想它看起来像
def cmp(first:C, second:C, t:() => Int): Boolean = {
  first.t < second.t
}

这提示 t 不是 C 的方法。当然必须有一种方法来表达这一点。

最佳答案

def cmp(first:C, second:C, t: C => Int): Boolean = {
  t(first) < t(second)
}

然后...
val c1 = new C
val c2 = new C
cmp(c1, c2, _.f1())
cmp(c1, c2, _.f2())

这是使用匿名函数。最后两行相当于:
cmp(c1, c2, {c: C => c.f1()})
cmp(c1, c2, {c: C => c.f2()})

除非您使用某种反射,否则您无法传递对方法本身的引用。

关于scala - 如何在Scala中将类方法作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17414994/

相关文章:

scala - 为什么授权指令在它应该保护的代码之后执行?

scala - Scalaz 7 中 map2 的新名称是什么?

scala - 如何解决 sbt 中的依赖问题

scala - 如何使用 sbt-scoverage 在 Akka-HTTP 服务中编写集成测试用例?

java - Play框架文件上传无此类文件异常

scala - 无法证明 "a Tuple2"< :< (T, U)

scala - sbt 在运行 Spark hello world 代码时出错?

python双列表理解对scala等效

java - 在Scala内置的类文件上运行Java源注释处理

Scala:早期定义/早期初始化器/预初始化字段的示例使用