scala - 有没有办法将带括号的 0 元方法迁移到不带括号的方法?

标签 scala

假设我设计了一些 API,并且短视地在其定义中给出了 0 元函数括号

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 元函数从有括号迁移到没有括号?

最佳答案

您可以为 parened 方法提供一个未使用的可变参数。

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

关于scala - 有没有办法将带括号的 0 元方法迁移到不带括号的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61004457/

相关文章:

scala - 如何在 Scala 中将文件读取为字节数组

java - 在 Java/Scala 项目中检查 null 与匹配

scala - 在 scala 中使用 def、val 和 var

json - 将 Json 转换为 Map[String, String]

java - 有没有办法在java(或scala)信号量对象中​​包含条件来获取方法?

scala - 计算 scala 中的平均值

json - 如何在 Scala 中创建 JSON 对象?

scala - 如何在运行时确定 Scala.js 和 JVM 的 Scala 版本?

scala - 如何通过scala中的类方法传递类型参数?

Java/Scala 测试集合框架