假设我设计了一些API,并在其定义中短视地给出了一个0-arity函数括号
class Foo(value: String) {
def chars(): Seq[Char] = value.toSeq
}
这意味着,如果您想在对该方法的调用之后在返回的Seq
:上使用apply
,则必须提供空括号
val f = new Foo("Hello")
println(f.chars()(3))
这显然不理想,最好能写:
println(f.chars(3))
当然,如果从方法定义中删除圆括号,则会破坏所有提供圆括号的现有用途。有没有一种方法可以在不破坏所有用途的情况下将0-arity函数从有括号迁移到没有括号?
您可以给parened方法一个未使用的vararg。
class Foo(value: String) {
def chars(cs:Char*): Seq[Char] = value.toSeq
def chars: Seq[Char] = value.toSeq
}
(new Foo("wxyz")).chars()(2) //res0: Char = y
(new Foo("wxyz")).chars(2) //res1: Char = y