我想知道是否有一个较短的版本

var longVariableName: MyType = MyTyp("Value")
longVariableName = longVariableName.addSomething("added")

case class MyType(value: String) {
  def addSomething(add: String): MyType = ???
}

也许像
var longVariableName: MyType = MyType("Value")
longVariableName = _.addSomething("extended")

会很好:)
谢谢

最佳答案

我想最简单的方法是:

val longVariableName = MyTyp("Value")
.addSomething("added")
.addSomethingElse("other")
.addSomeMore("stuff")

只要每种方法都返回基本类型(即“构建器”模式),您就可以进一步链接调用。
这样,您使用一个值(而不是变量),并且假定每个方法调用都返回case类的新实例,则它是不可变的,没有副作用。

此外,案例类使用copy方法支持类似构建器的模式,该模式允许以不变的方式“添加”信息。

像这样:
case class Player(name:String, rank:Option[String] = None) {
    def withRank(rank:Int)= this.copy(rank=Some(s"top${100-rank}%"))
}

val player = Player("sparky").withRank(5)

(或多行)
val player = Player("sparky")
.withRank(5)

10-08 13:10