经过一些讨论之后,我想强调一下,这个问题与在产品/总和类型的OOP中使用继承有关,如在FP中,反之亦然.你喜欢什么,你的建议是什么!所以...
我有一些疑问 - 更清晰(更清晰)的方法是什么来定义以下内容:
比如我更喜欢
sealed trait Shape
case class Square(length: Int) extends Shape
case class Rhombus(length: Int) extends Shape
Run Code Online (Sandbox Code Playgroud)
代替
sealed abstract class Shape(val length: Int)
case class Square(override val length: Int) extends Shape(length)
case class Rhombus(override val length: Int) extends Shape(length)
Run Code Online (Sandbox Code Playgroud)
但是之后
def draw(shape: Shape): String = shape match {
case Square(length) => length.toString
case Rhombus(length) => length.toString
}
Run Code Online (Sandbox Code Playgroud)
代替
def draw(shape: Shape): String = shape.length.toString
Run Code Online (Sandbox Code Playgroud)
类型的定义在第一种方法中看起来更简洁,更一致,但如果我需要为所有形状都有一个通用逻辑,比如draw方法,第二种方法看起来更清晰.