有没有一种方法可以将带括号的0-arity方法迁移到不带括号的方法



假设我设计了一些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

最新更新