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

莱昂内尔

在我的 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 无法更改怎么办?如果可以呢?

jwvh

形式f1 >> f2其实就是意思f1.>>(f2),意思就是Foo应该有这样的方法。

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

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

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

现在f1 >> f2应该工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为模板类编写二元加法运算符。编译错误

如何从类中获取二元运算符?

预期的二元运算符

[[ 运算符失败,错误为“预期条件二元运算符”

Javascript 是否具有用于代替二元运算符的函数?

我可以在Google表格的IFS函数中使用二元运算符OR和AND吗?

带表函数的二元运算符的非数字参数

类没有合适的复制构造函数,找不到二元运算符“=”,

Swift 3的二元运算符

非数字参数二元运算符错误

使用二元运算符“--”作为向量

什么是Haskell中的二元运算符

有条件的二元运算符

预期的二元运算符?不明白

C++中的二元运算符重载

将非数字参数映射到 R 中的二元运算符错误

为什么选择二元运算符而不是一元运算符?

如何用二元运算符的比较结果来解释条件?

具有提取对象字段的函数和将应用于这些字段的二元运算符的方法声明

如何将一个单词分解为二元语法,包括重复的二元语法?

数字数据为 R 中的二元运算符提供错误的非数字参数

函数错误:“二元运算符‘+’不能应用于‘Double’和‘Int’类型的操作数”

如何将+和+ =运算符重载为非成员函数?

UNIX:如何移动文件夹内的所有文件而不需要二元运算符

如何解决这个二元运算符的错误操作数类型

kotlin 中计算器的一元和二元减运算符

解析表达式 - 一元、二元和递增/递减运算符

如何将运算符打印为输出?

如何将运算符传递给python函数?