Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在scala中同时执行一个函数作为右关联和左关联吗?_Scala - Fatal编程技术网

我可以在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)

您可以使用独立函数。