我尝试使用Scala Test中的KeyError
来测试Java 8类。根据Scala rx.Observable
release notes:
用于SAM类型的LAMBDA语法(实验)从M3开始,此功能是 默认情况下尚未开启。您可以使用
2.12.0-M3
启用它 编译器选项。当启用该选项时,则类似于Java 8,Scala 2.12允许 通过传递一个抽象方法,用一个抽象方法实例化任何类型 拉姆达。
但是,使用Gradle和IntelliJ,我无法进行以下编译:
-Xexperimental
的build.gradle :
val o: rx.Observable[util.Map.Entry[String, _ <: util.Collection[String]]] = ???
val scheduler = new TestScheduler()
scheduler.createWorker().schedule(_ => o.foreach { }) // The argument is an Action0, which has a SAM void call()
答案 0 :(得分:4)
scheduler.createWorker().schedule(_ => o.foreach { }) // The argument is an Action0, which has a SAM void call()
那会试图传递一个带有一个参数的“函数”(而不是带有1参数SAM的接口/特征的匿名实例)。 _
只表示您不在身体中使用该参数。 Action0
的{{1}}需要0个参数,因此请尝试使用call()
。