加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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语言,你可以用类似的方法:创建一个抽象的基类,并将你的数据的构造函数转换成类/对象.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读