如果我从Scala类的实例调用apply方法
object Main {
def main(args: Array[String]): Unit = {
val a = new A(2)
a(2)
a(10)
}
class A(a: Int) {
def apply(a: Int): A = new A(a)
}
}
我无法通过 Alt + F7 或Ctrl +点击找到它的用法。
有没有办法在IntelliJ中找到scala apply方法的用法?
编辑:在第一次提出这个问题时,我不明白这只是针对类实例的apply-method的一个问题。它适用于伴随对象中的apply-method,如@sebszyller所示。
这可能是IntelliJ中的一个错误。结束这个问题。
答案 0 :(得分:1)
以下代码段适用于我。
2016-08-19 12:04:56.993 UTC
Ctrl-Click 为我提供了一个显示object Main {
def main(args: Array[String]): Unit = {
val a1 = A(1)
val a2 = A(2)
}
class A(a: Int)
object A {
def apply(a: Int): A = new A(a)
}
}
和A(1)
的列表。不幸的是,目前无法显示屏幕截图。
也适用于你的榜样;给我一个两个用法列表。
A(2)
我现在在2016.2但是我一直在使用该选项,只要我记得。
更新:
我想出来了。请考虑以下代码段:
object Main {
def main(args: Array[String]): Unit = {
val eleven = Add10(1)
val twelve = Add10(2)
}
object Add10 {
def apply(a: Int): Int = a + 10
}
}
似乎object Main {
def main(args: Array[String]): Unit = {
val a = new A(2)
val b = new A(10)
val a1 = a(2)
val a2 = a(2)
a.doSthElse
val b1 = b(10)
val b2 = b(10)
val apply1 = a.apply _
val apply2 = b.apply _
val apply3 = a.apply(10)
val tenFromA = apply1(10)
val tenFromB = apply2(10)
}
class A(a: Int) {
def apply(a: Int): A = new A(a)
def doSthElse = println("sth else")
}
}
链接到类的实例而不是定义本身。在下面的代码段中,如果您点击apply
,它会显示所有用法:a
两次,a(2)
和a.doSthElse
以及a.apply _
。我以b
,a.apply _
和b.apply _
的形式包含了三个显式调用。单击a.apply(10)
确实显示了这三种用法的列表。在我看来,它无法确定def apply
是a(2)
来电是一个错误。