我喜欢定义标量乘法向量,如下所示:
Vector * scalar (1)
scalar * Vector (2)
我可以将*定义为实现第一种情况的Vector类的函数。然后,我如何实现第二种情况,我能想到的一种方法是使用正确的关联函数,但它需要我添加" ::"在函数名称中,不可读。我希望第二种情况看起来像第一种情况。我怎样才能在scala中创建它?感谢
答案 0 :(得分:3)
您需要将标量类型的隐式转换添加到具有*(x: Vector)
方法的类中。它可以像
implicit class ScalarVectorMult(scalar: Double) {
def *(vector: Vector): Vector = vector * scalar
}
需要将其放在包对象或对象中 - 将其直接放在包中是行不通的。
答案 1 :(得分:2)
我认为你需要做一些图书馆的pimpin。
对于第一种情况:
class MyVector(vector: Vector[Double]) {
def *(scalar: Double) = vector.map(_ * scalar)
}
implicit def vectorToMyVector(vector: Vector[Double]) = new MyVector(vector)
然后对于第二种情况,你会做类似的事情:
class Scalar(value: Double) {
def *(vector: Vector[Double]) = vector.map(_ * value)
}
implicit def doubleToScalar(value: Double) = new Scalar(value)