我有一个使用pimped jme Quaternion数学的代码。数学扩展(对于Java jMonkeyEngine Quaternion)如下所示:
object Operators {
implicit class QuaternionMath(val a: Quaternion) extends AnyVal {
def * (b: Quaternion) = a mult b
//def * (b: Float) = a mult b
}
}
使用数学的代码如下所示:
import Operators._
......稍后在一个函数中:
def compute(q1: Quaternion, q2: Quaternion) = {
q1 * q2
}
现在添加了一些似乎没有相关的代码之后,我收到了语法错误:
错误:(477,10)值*不是com.jme3.math.Quaternion的成员
要修复错误,我需要在计算之前重复导入,无论是再次使用通配符还是特定的通配符:
import Operators.QuaternionMath
import Operators._
我不知道什么可以隐藏QuaternionMath
隐式转换。有没有办法检查,某些工具或某些编译器开关?
答案 0 :(得分:3)
如果QuaternionMath
确实在范围内,您应该能够写
val m: location.of.Operators.QuaternionMath = QuaternionMath(q1)
m.*(c2)
如果第一行失败,它将告诉
QuaternionMath
。它真的不在范围内QuaternionMath
的东西遮住了。在这种情况下,您可以在IDE中跳转到该阴影符号的来源。QuaternionMath
不是Operators
的成员(我猜这里)。然后Operators
不是您想象的对象,而是另一个具有相同名称的对象。再次在IDE中,只需选择Operators
的{{1}}位并查找源(IntelliJ中的Ctrl-B)以验证您正在执行您认为自己正在做的事情。答案 1 :(得分:2)
如果您使用IntelliJ IDEA for Scala,请尝试通过选择表达式并按 ctrl + shift + q 来检查可能的隐式转换(对于Mac, ctrl + q ,请检查this tutorial。
对于Scala IDE,有implicit conversion highlighting。