Scala 如何编写作为二进制运算符的函数?
在Scala程序中,我有一个数据类型Foo,我想为它编写一个二进制运算符>> 下面是一些示例代码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
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,