我想知道是否有一个较短的版本
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)