微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

假设我有一种方法期望另一种方法作为参数.是否可以为该参数发送对象的实例方法?我如何处理没有参数的方法

我会写一些伪代码

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的参数?

解决方法

我认为myMethod4可能就是你所说的:“是否有可能引用a.size并在需要时调用它?”.

def myMethod1(f: Int => Unit): Unit = f(1)

def myMethod2(f: () => Int): Unit = {
  val value = f // f is function,taking no arguments,and returning an int.
                // we invoke it here.
  ()
}

def myMethod3(f: => Int): Unit = {
  val value = f // f is call by name parameter.
  ()
}

def myMethod4[A](f: A => Int,a: A): Unit = {
  val value = f(a)
  ()
}

import java.util.ArrayList

val a = new ArrayList[Int](1)
myMethod1((i: Int) => a.add(i))
myMethod1(a.add(_))     // shorthand for the above
myMethod2(() => a.size) // a.size is not evaluated,it is enclosed in an anonymous function deFinition.
myMethod3(a.size)       // a.size is not evaluated here,it is passed as a by-name parameter.
myMethod4((al: ArrayList[Int]) => al.size,a)
myMethod4((_: ArrayList[Int]).size,a)
myMethod4[ArrayList[Int]](_.size,a)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐