小编iur*_*suk的帖子

在Scala中定义ADT的首选方法是什么 - OO与FP

经过一些讨论之后,我想强调一下,这个问题与在产品/总和类型的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方法,第二种方法看起来更清晰.

functional-programming scala

2
推荐指数
1
解决办法
179
查看次数

标签 统计

functional-programming ×1

scala ×1