在Scala中定义OCaml样式的类型变体

时间:2016-11-19 21:20:45

标签: scala

我是Scala的新手,但在使用OCaml和其他一些ML系列函数式编程语言方面有一些经验。

我想知道如何定义OCaml样式类型变体?例如,

type fruit = Apple | Orange | Strawberry
let analysis f = 
   match f with
   | Apple -> ...
   | Orange -> ...
   | Strawberry -> ...

如果这个问题太天真,我很抱歉。希望有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

我不了解OCaml,但看起来你正试图做这样的事情。

sealed abstract class Fruit
class Apple extends Fruit
class Orange extends Fruit
class Strawberry extends Fruit

def mixFruit(f: Fruit) = f match {
  case a: Apple =>      // do something with a
  case o: Orange =>     // do something with o
  case s: Strawberry => // do something with s
}