这是一个代码示例。不知道为什么我在使用乘法时会出错。 我应该向Int添加隐式转换吗?当然答案很简单!! 感谢
class Fraction(val x:Int, val y:Int)
{
def X = x
def Y = y
implicit def int2Fraction(n: Int) = Fraction(n, 1)
def *(that: Fraction) : Fraction = new Fraction(that.X * X, that.Y * Y)
}
object Fraction {
def apply(x: Int, y: Int) = new Fraction(x, y)
}
val x : Int = 3
val result = x * Fraction(4, 5)
println( result.X )
答案 0 :(得分:4)
您的隐式转换函数是Fraction类的成员 - 因此无法在没有Fraction
的实例的情况下调用它。如果将其移至object
,它将按预期工作:
object Fraction {
def apply(x: Int, y: Int) = new Fraction(x, y)
implicit def int2Fraction(n: Int) = Fraction(n, 1)
}
答案 1 :(得分:2)
要进行隐式转换,它必须在范围内。尝试在课外学习:
implicit def int2Fraction(n: Int) = Fraction(n, 1)
class Fraction(val x:Int, val y:Int)
{
def X = x
def Y = y
def *(that: Fraction) : Fraction = new Fraction(that.X * X, that.Y * Y)
}
object Fraction {
def apply(x: Int, y: Int) = new Fraction(x, y)
}
你也可以把它放在伴侣对象里面;编译器会自动搜索。