我想知道是否有更短版本的
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")
会这么好:) 谢谢
答案 0 :(得分:5)
我想最简单的方法是:
val longVariableName = MyTyp("Value")
.addSomething("added")
.addSomethingElse("other")
.addSomeMore("stuff")
只要每个方法返回基本类型(即“Builder”模式),您就可以进一步链接调用。 这样,你使用一个值(不是一个变量)并且假设每个方法调用都返回一个case类的新实例,它是不可变的,没有副作用。
此外,案例类使用复制方法支持类似构建器的模式,允许以不可变的方式“添加”信息。
这样的事情:
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)
答案 1 :(得分:3)
您可以为案例类定义+
方法:
case class MyType(value: String) {
def +(add: String) = MyType(value + add)
}
var longVariableName: MyType = MyType("Value")
longVariableName += "extended"
答案 2 :(得分:0)
您可以使用复制方法而无需定义任何其他内容。
case class MyType(value: String, otherValue: String, otherOthervalue: String)
val longName = MyType("Value","OtherValue","OtherOtherValue")
val longerName = longName.copy(value=longName.value+"extended")