Scala - 运算符定义

时间:2012-07-28 23:16:16

标签: scala operators

  

可能重复:
  How does Scala's apply() method magic work?

我是Scala的绝对初学者,在阅读其中一本应用函数的Scala书籍后,就像“重载()运算符”我开始想知道如何定义。即,operator()将在括号之间采用参数,而不是传统的中缀a()b表示法。在Scala中是否可以定义此类运算符?如果是,那么定义语法是什么?感谢。

1 个答案:

答案 0 :(得分:3)

正如您在问题中所述,您只需定义一个名为apply的方法(一个函数)来定义它。

foo(bar, baz)

被翻译为

foo.apply(bar, baz)

因此,只要foo具有正确的arity和类型的apply方法,这就行了。

apply方法实现的一些示例是Array伴随对象,它允许您通过调用Array(1, 2, 3)(实际上只是Array.apply(1, 2, 3))来构造数组以及Array类,它允许您通过调用anArray(i)(实际上只是anArray.apply(i))来访问数组元素。

这类似于例如Python,其中函数调用被转换为对__call__运算符或Ruby的调用,其中foo.(bar, baz)形式的表达式被转换为foo.call(bar, baz)

类似的方法是update

foo(bar) = baz

被翻译为

foo.update(bar, baz)