我读过,在Scala中你可以重载任何运算符,而不是像Groovy那样。但是我没有看到如何重载函数调用的任何例子。
是否有可能/如何在Scala中重载函数调用操作符?
我知道“Scala中没有运营商”,但尽管如此,我还是应该按照我的名字去做。
答案 0 :(得分:3)
函数调用拼写为apply
。任何具有名为apply
的方法的对象都会重载函数调用。
class Functionish(val int: Int, val str: String) {
def apply(i: Int): Int = i + int
def apply(s: String): String = s + str + s
}
val f = new Functionish(42, "hello")
println(f(4))
println(f("George, "))
打印
46
George, helloGeorge,
值得注意的是:案例类伴随对象重载apply
。这就是您可以使用
val instance = CaseClass(foo, bar, baz)
而不是
val instance = new CaseClass(foo, bar, baz)
答案 1 :(得分:0)
每个“可调用”对象都是通过apply
方法调用的:
scala> def foo(i: Int) = i * i
foo: (i: Int)Int
scala> val f = foo _
f: Int => Int = <function1>
scala> f(42)
res2: Int = 1764
scala> f.apply(42)
res3: Int = 1764
你在找什么?