我可以在scala中同时执行一个函数作为右关联和左关联吗?
我想定义标量乘向量,如下所示:我可以在scala中同时执行一个函数作为右关联和左关联吗?,scala,Scala,我想定义标量乘向量,如下所示: Vector * scalar (1) scalar * Vector (2) 我可以将*定义为实现第一种情况的类向量的函数。那么我如何实现第二种情况,我可以想到的一种方法是使用正确的关联函数,但它要求我在函数名中添加“:”,这是不可读的。我希望第二个案子看起来和第一个案子一样。我怎样才能用scala制作?谢谢您需要将标量类型的隐式转换添加到具有*(x:Vector)方法的类中。它可以简单到 implicit class ScalarVectorMult
Vector * scalar (1)
scalar * Vector (2)
我可以将*定义为实现第一种情况的类向量的函数。那么我如何实现第二种情况,我可以想到的一种方法是使用正确的关联函数,但它要求我在函数名中添加“:”,这是不可读的。我希望第二个案子看起来和第一个案子一样。我怎样才能用scala制作?谢谢您需要将标量类型的隐式转换添加到具有
*(x:Vector)
方法的类中。它可以简单到
implicit class ScalarVectorMult(scalar: Double) {
def *(vector: Vector): Vector = vector * scalar
}
这需要放在包对象或对象中——直接放在包中是行不通的。我认为您需要对库进行一些微调 对于第一种情况:
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)
您可以使用独立函数。