Scala 如何找到阻止隐式转换的因素(pimp类)?
我有一个使用pimped jme四元数数学的代码。数学扩展(用于Java jMonkeyEngine四元数)如下所示:Scala 如何找到阻止隐式转换的因素(pimp类)?,scala,implicit,Scala,Implicit,我有一个使用pimped 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._ 使用数学的
object Operators {
implicit class QuaternionMath(val a: Quaternion) extends AnyVal {
def * (b: Quaternion) = a mult b
//def * (b: Float) = a mult b
}
}
import Operators._
使用数学的代码如下所示:
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)value*不是com.jme3.math.Quaternion的成员
要修复错误,我需要在计算之前重复导入,或者再次作为通配符,或者作为特定的通配符:
import Operators.QuaternionMath
import Operators._
我不知道什么可以隐藏
四元数路径
隐式转换。有什么方法可以检查它、某些工具或某些编译器开关吗?如果您使用IntelliJ IDEA for Scala,请尝试通过选择一个表达式并按ctrl+shift+q(ctrl+q for Mac),检查可能的隐式转换
对于Scala IDE有。如果
四元数路径
确实在范围内,您应该能够编写
val m: location.of.Operators.QuaternionMath = QuaternionMath(q1)
m.*(c2)
如果第一行失败,它将告诉您
- 找不到值
。这真的不在范围之内四元数路径
- 你不能这样叫它,然后你用另一种叫做
的东西来掩盖它。在这种情况下,您可以在IDE中直接跳转到阴影符号的源QuaternionMath
不是四元数路径
的成员(我猜是这样)。然后,运算符
不是您想象的对象,而是另一个同名的对象。同样在IDE中,只需选择导入操作符的操作符
位.\u并查找源代码(IntelliJ中的Ctrl-B)以验证您正在做您认为正在做的事情操作符
val m:Operators.QuaternionMath
->val m:QuaternionMath
隐藏了我的观点-您可以有不同的同名QuaternionMath
。我将撤销该编辑并完全限定操作符。在q1
上按Ctrl+Shift+Q
时,会提供两种不同的隐式转换,这显示了歧义。