Scala 更好的案例类继承弃用解决方案?
我正在使用公认的有点陈旧的Scala编程[Subramaniam,2009],在使用下面的case类进行第9.7节匹配时遇到了一个令人不安的编译器警告 下面是我根据对错误消息的解释设计的解决方案。我怎样才能使用更接近本书示例初衷的解决方案来改进这段代码?特别是如果我想使用密封的案例类功能Scala 更好的案例类继承弃用解决方案?,scala,pattern-matching,Scala,Pattern Matching,我正在使用公认的有点陈旧的Scala编程[Subramaniam,2009],在使用下面的case类进行第9.7节匹配时遇到了一个令人不安的编译器警告 下面是我根据对错误消息的解释设计的解决方案。我怎样才能使用更接近本书示例初衷的解决方案来改进这段代码?特别是如果我想使用密封的案例类功能 /** * [warn] case class `class Sell' has case ancestor `class Trade'. * Case-to-case inheritance has
/**
* [warn] case class `class Sell' has case ancestor `class Trade'.
* Case-to-case inheritance has potentially dangerous bugs which
* are unlikely to be fixed. You are strongly encouraged to instead use
* extractors to pattern match on non-leaf nodes.
*/
// abstract case class Trade()
// case class Buy(symbol: String, qty: Int) extends Trade
// case class Sell(symbol: String, qty: Int) extends Trade
// case class Hedge(symbol: String, qty: Int) extends Trade
object Side extends Enumeration {
val BUY = Value("Buy")
val SELL = Value("Sell")
val HEDGE = Value("Hedge")
}
case class Trade(side: Side.Value, symbol: String, qty: Int)
def process(trade: Trade) :String = trade match {
case Trade(_, _, qty) if qty >= 10000 => "Large transaction! " + trade
case Trade(_, _, qty) if qty % 100 != 0 => "Odd lot transaction! " + trade
case _ => "Standard transaction: " + trade
}
而不是从封闭的特质交易中继承
sealed trait Trade
case class Buy(symbol: String, qty: Int) extends Trade
case class Sell(symbol: String, qty: Int) extends Trade
case class Hedge(symbol: String, qty: Int) extends Trade
而不是从封闭的特质交易中继承
sealed trait Trade
case class Buy(symbol: String, qty: Int) extends Trade
case class Sell(symbol: String, qty: Int) extends Trade
case class Hedge(symbol: String, qty: Int) extends Trade
嗯……好像有几本书的标题是《Scala编程》。参考SubramaniamAnd的一本,然后是Scala编程,Odersky的经典之作。嗯……似乎有几本书的标题是Scala编程。参考SubramaniamAnd的一个,然后是Scala编程,Odersky的经典。