3

有没有办法=在 Scala 的类中覆盖或重载运算符以隐式转换数据而不定义隐式方法?

例如 :

class A{
    def =(str:String)={
       .........
    }
}
.........
val a=new A
a="TEST"
4

3 回答 3

6

您不能=在 Scala 中覆盖,因为它是语言定义的运算符(例如([<-are)。

你唯一能做的就是使用更新方法:

scala> :paste
// Entering paste mode (ctrl-D to finish)

class A {
  var data = Map.empty[Int, String]
  def update(i: Int, str: String) {
    data += i -> str
  }
  def apply(i: Int): String =
    data(i)
}

// Exiting paste mode, now interpreting.

defined class A

scala> val a = new A
a: A = A@77cb05b9

scala> a(5) = "hello"

scala> a(5)
res7: String = hello

但是仍然不可能省略括号,a(5) = "hello"因为a = "hello"它是重新定义值的语法。当您只指定如下更新方法时,最短的可能表示法是a() = "hello"def update(str: String) {...}

有关如何使用更新方法的更详细说明,请参阅此博客文章。

于 2013-09-21T12:34:30.963 回答
5

根据 Scala 语言规范第 1.1 节,=是保留字。因此,您不能覆盖或重载它。

于 2013-09-21T12:34:08.057 回答
3

您还可以使用Scala-Virtualized,您可以在其中覆盖所有控制结构。这几乎可以肯定是矫枉过正,但选项存在。

于 2013-09-21T20:46:30.710 回答