scala – 从功能迁移到OO的问题
发布时间:2020-12-16 09:21:00 所属栏目:安全 来源:网络整理
导读:我习惯于使用功能编程(主要是Haskell),我从OO(scala)开始. 我在翻译代码时遇到麻烦.例如,这是我的Haskell定义的一个B树: data BTree a = Leaf |Node2 (BTree a) a (BTree a) |Node3 (BTree a) a (BTree a) a (BTree a) deriving (Eq,Read,Show) 这很简单我
我习惯于使用功能编程(主要是Haskell),我从OO(scala)开始.
我在翻译代码时遇到麻烦.例如,这是我的Haskell定义的一个B树: data BTree a = Leaf |Node2 (BTree a) a (BTree a) |Node3 (BTree a) a (BTree a) a (BTree a) deriving (Eq,Read,Show) 这很简单我的树是空的,或者它有一个价值,是两棵树的父亲,或它是3个子树的父亲. 什么是OO?我没有任何线索.我只是无法弄清楚我该如何以合理的方式做到这一点. 解决方法
由于您的标签列表中有Scala,以下是在Scala中如何完成:
你有一个基本特征(在Haskell中的类型),并从所有的Haskell构造函数派生为大小写类.这样就可以在Scala模式匹配中使用它们. sealed trait Tree[+A] case object Leaf extends Tree[Any] case class Node2[+A](a: A,t1: Tree[A],t2: Tree[A]) extends Tree[A] case class Node3[+A](a: A,b: A,t2: Tree[A],t2: Tree[A]) extends Tree[A] 在Java语言(从1.5开始)以来,C和C#有类似的模板来帮助键入安全.他们基本上像Haskell中的类型变量一样工作. 这个例子在Scala中,但是对于其他的OO语言,你可以用类似的方法:创建一个抽象的基类,并将你的数据的构造函数转换成类/对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |