gpt4 book ai didi

scala - 我可以将对象的实例方法传递给期望在 Scala 中进行回调的方法吗?

转载 作者:行者123 更新时间:2023-12-04 16:56:41 24 4
gpt4 key购买 nike

假设我有一个方法需要另一个方法作为参数。是否可以为该参数发送对象的实例方法?我将如何处理没有参数的方法?

我会写一些伪代码:

void myMethod1(callback<void,int> otherFunc); // imagine a function returning void, and taking a int parameter

void myMethod2(callback<int,void> otherFunc); // function returning void, not taking params

例如,如果我有一个 ArrayList,就像这样:
val a = new ArrayList()

我怎么能发送它的 add方法作为 myMethod1 的参数,它是 size方法作为 myMethod2 的参数?

最佳答案

Scala 中函数的类型表示为

(Types,To,Pass) => ReturnType

(如果只有一个类型要传递,则可以省略括号),将方法转换为函数以传递给另一个方法的方法是

myObject.myMethod _

因此,将这些放在一起——并注意 Java 类的类型:
scala> def addMySize(adder: Int => Boolean, sizer: () => Int) = adder(sizer())
addMySize: ((Int) => Boolean,() => Int)Boolean

scala> val a = new java.util.ArrayList[Int]()
a: java.util.ArrayList[Int] = []

scala> addMySize(a.add _, a.size _)
res0: Boolean = true

scala> addMySize(a.add _, a.size _)
res1: Boolean = true

scala> println(a)
[0, 1]

(请注意, ArrayList 有一个 add ,它接受一个对象并返回一个 bool 值——而不是一个返回 void 的。)

关于scala - 我可以将对象的实例方法传递给期望在 Scala 中进行回调的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2087925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com