我有一个使用 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
}
现在在添加了一些似乎不相关的代码后,我收到了一个语法错误:
要修复错误,我需要在计算之前重复导入,再次作为通配符或特定的:
import Operators.QuaternionMath
import Operators._
我不知道什么可以隐藏
QuaternionMath
隐式转换。有什么方法可以检查,一些工具,或一些编译器开关? 最佳答案
如果 QuaternionMath
确实在范围内,您应该能够编写
val m: location.of.Operators.QuaternionMath = QuaternionMath(q1)
m.*(c2)
如果第一行失败,它会告诉
QuaternionMath
未找到。确实不在范围内 QuaternionMath
的东西遮蔽了它。在这种情况下,您可以在 IDE 中直接跳转到该阴影符号的来源。 QuaternionMath
不是 Operators
的成员(我的猜测在这里)。那么 Operators
不是你想象的那个对象,而是另一个同名的对象。再次在 IDE 中,只需选择 Operators
的 import Operators._
位并查找源代码(IntelliJ 中的 Ctrl-B)以验证您正在做您认为正在做的事情。 关于scala - 如何找到阻止隐式转换(皮条客类)的原因?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34639674/