如何找到阻止隐式转换的原因 (pimp class)?
How to find what is preventing an implicit conversion (pimp class)?
我有一个使用 jme 四元数数学的代码。数学扩展(针对 Java jMonkeyEngine 四元数)如下所示:
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
}
现在,在添加了一些看似不相关的代码后,出现语法错误:
Error:(477, 10) value * is not a member of com.jme3.math.Quaternion
要修复错误,我需要在计算之前重复导入,再次作为通配符或特定通配符:
import Operators.QuaternionMath
import Operators._
我不知道什么可以隐藏 QuaternionMath
隐式转换。有什么方法可以检查它、一些工具或一些编译器开关吗?
如果您使用的是 IntelliJ IDEA for Scala,那么请尝试通过选择一个表达式并按 ctrl+shift[= 来检查可能的隐式转换21=]+q (ctrl+q for Mac), 检查this tutorial.
对于 Scala IDE 有 implicit conversion highlighting。
如果 QuaternionMath
确实在范围内,你应该可以写
val m: location.of.Operators.QuaternionMath = QuaternionMath(q1)
m.*(c2)
如果第一行失败,它会告诉
未找到 - 值
QuaternionMath
。确实不在范围内
- 你不能那样称呼它,然后你用另一个叫做
QuaternionMath
的东西来掩盖它。在这种情况下,您可以在 IDE 中直接跳转到该阴影符号的来源。
QuaternionMath
不是 Operators
的成员(我的猜测)。那么Operators
并不是你想象中的那个对象而是另一个同名对象。再次在 IDE 中,仅 select import Operators._
的 Operators
位并查找源代码(IntelliJ 中的 Ctrl-B )以验证您正在做您认为的事情你在做。
我有一个使用 jme 四元数数学的代码。数学扩展(针对 Java jMonkeyEngine 四元数)如下所示:
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
}
现在,在添加了一些看似不相关的代码后,出现语法错误:
Error:(477, 10) value * is not a member of com.jme3.math.Quaternion
要修复错误,我需要在计算之前重复导入,再次作为通配符或特定通配符:
import Operators.QuaternionMath
import Operators._
我不知道什么可以隐藏 QuaternionMath
隐式转换。有什么方法可以检查它、一些工具或一些编译器开关吗?
如果您使用的是 IntelliJ IDEA for Scala,那么请尝试通过选择一个表达式并按 ctrl+shift[= 来检查可能的隐式转换21=]+q (ctrl+q for Mac), 检查this tutorial.
对于 Scala IDE 有 implicit conversion highlighting。
如果 QuaternionMath
确实在范围内,你应该可以写
val m: location.of.Operators.QuaternionMath = QuaternionMath(q1)
m.*(c2)
如果第一行失败,它会告诉
-
未找到
- 值
QuaternionMath
。确实不在范围内 - 你不能那样称呼它,然后你用另一个叫做
QuaternionMath
的东西来掩盖它。在这种情况下,您可以在 IDE 中直接跳转到该阴影符号的来源。 QuaternionMath
不是Operators
的成员(我的猜测)。那么Operators
并不是你想象中的那个对象而是另一个同名对象。再次在 IDE 中,仅 selectimport Operators._
的Operators
位并查找源代码(IntelliJ 中的 Ctrl-B )以验证您正在做您认为的事情你在做。