Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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_Operator Overloading - Fatal编程技术网

Scala 如何编写作为二进制运算符的函数?

Scala 如何编写作为二进制运算符的函数?,scala,operator-overloading,Scala,Operator Overloading,在Scala程序中,我有一个数据类型Foo,我想为它编写一个二进制运算符>> 下面是一些示例代码 class Foo {} object BinaryOps { def >>(f1: Foo, f2: Foo): Foo = ??? def main(args: Array[String]): Unit = { val f1 = new Foo() val f2 = new Foo() // val f3 = f1 >> f2 // Er

在Scala程序中,我有一个数据类型Foo,我想为它编写一个二进制运算符>>

下面是一些示例代码

class Foo {}

object BinaryOps {
  def >>(f1: Foo, f2: Foo): Foo = ???

  def main(args: Array[String]): Unit = {
    val f1 = new Foo()
    val f2 = new Foo()
//  val f3 = f1 >> f2   // Error: cannot resolve symbol >>
    val f4 = >>(f1, f2) // works, but I want the binary op syntax.

//  val f5 = f1 >> f2 >> f3 >> f4   // ultimate goal is to be able to chain calls.
  }
}
到目前为止,我的IDE显示它无法解析符号>>,也就是说,编译器不会尝试将其用作二进制运算符

如何更改它,以便找到符号并将其用作二进制运算符

编辑:如果不能更改Foo怎么办?如果可以呢?

表单f1>>f2实际上是指f1.>>f2,这意味着Foo应该有这样一个方法

class Foo {
  def >>(that :Foo) :Foo = ???
  ...
如果无法修改Foo,则可以创建隐式转换

implicit class FooOps(thisfoo :Foo) {
  def >>(thatfoo :Foo) :Foo = ???
}
现在f1>>f2应该可以工作了。

形式f1>>f2实际上是指f1。>>f2这意味着Foo应该有这样一个方法

class Foo {
  def >>(that :Foo) :Foo = ???
  ...
如果无法修改Foo,则可以创建隐式转换

implicit class FooOps(thisfoo :Foo) {
  def >>(thatfoo :Foo) :Foo = ???
}
现在f1>>f2应该可以工作了。

您可以修改Foo吗?-另外,阅读以确保您真的需要它。如果可以更改Foo,那么您只需将>>移动到Foo def>>即可:Foo:Foo=???它会起作用的。如果无法更改Foo,则可以使用扩展方法将>>隐式添加到Foo,是否可以修改Foo?-另外,阅读以确保您真的需要它。如果可以更改Foo,那么您只需将>>移动到Foo def>>即可:Foo:Foo=???它会起作用的。如果无法更改Foo,则可以使用扩展方法将>>隐式添加到Foo,