我想知道是否有更短的版本
var longVariableName: MyType = MyTyp("Value")
longVariableName = longVariableName.addSomething("added")
case class MyType(value: String) {
def addSomething(add: String): MyType = ???
}
Run Code Online (Sandbox Code Playgroud)
也许是这样的
var longVariableName: MyType = MyType("Value")
longVariableName = _.addSomething("extended")
Run Code Online (Sandbox Code Playgroud)
真是太好了:)谢谢
我想最简单的方法是:
val longVariableName = MyTyp("Value")
.addSomething("added")
.addSomethingElse("other")
.addSomeMore("stuff")
Run Code Online (Sandbox Code Playgroud)
只要每个方法返回基本类型(即"Builder"模式),您就可以进一步链接调用.通过这种方式,您可以使用值(而不是变量),并且假定每个方法调用都返回一个案例类的新实例,它是不可变的,没有副作用.
此外,案例类使用复制方法支持类似构建器的模式,该模式允许以不可变的方式在路上"添加"信息.
像这样的东西:
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)
Run Code Online (Sandbox Code Playgroud)
(或多线)
val player = Player("sparky")
.withRank(5)
Run Code Online (Sandbox Code Playgroud)