我有一个使用 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 中,只需选择 Operatorsimport Operators._ 位并查找源代码(IntelliJ 中的 Ctrl-B)以验证您正在做您认为正在做的事情。
  • 关于scala - 如何找到阻止隐式转换(皮条客类)的原因?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34639674/

    10-15 13:32