如何将函数编写为二元运算符?

问题描述 投票:0回答:1

在我的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无法更改怎么办?怎么样?

scala operator-overloading
1个回答
3
投票

形式f1 >> f2实际上意味着f1.>>(f2),这意味着Foo应该有这样的方法。

class Foo {
  def >>(that :Foo) :Foo = ???
  ...

如果无法修改Foo,则可以创建隐式转换。

implicit class FooOps(thisfoo :Foo) {
  def >>(thatfoo :Foo) :Foo = ???
}

现在f1 >> f2应该工作。

© www.soinside.com 2019 - 2024. All rights reserved.