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

在Scala中自动导出密封特征/ ADT排序

发布时间:2020-12-16 18:17:20 所属栏目:安全 来源:网络整理
导读:是否可以在 Scala中自动派生密封特征族的订单? 例如,能够这样做会很高兴: sealed trait Letterscase object A extends Letterscase object B extends Letters(A B) == True 这感觉就像Shapeless可以处理的东西,但我不知道这是否存在. 解决方法 我假设您希
是否可以在 Scala中自动派生密封特征族的订单?

例如,能够这样做会很高兴:

sealed trait Letters
case object A extends Letters
case object B extends Letters

(A < B) == True

这感觉就像Shapeless可以处理的东西,但我不知道这是否存在.

解决方法

我假设您希望排序反映定义的顺序,而不是按构造函数的名称排序.

这并不像您期望的那样有趣,因为ClassSymbol API上的knownDirectSubclasses返回一组符号,而不是有序序列.我不是scalac内部的专家,但according to Eugene Burmako(谁),knownDirectSubclasses的签名只反映了scalac中发生的事情.

顺便说一句,我已经complaining about this年了,在不同的时间点,我尝试过像reading positions off the symbols这样的东西,但它并没有真正起作用.

无形的通用机械必须在这里作出决定,因为它代表密封的特征作为副产品,它们对它们的元素进行排序.为了保持事物的确定性,它使用构造函数的名称来对案例进行排序:

// Entering paste mode (ctrl-D to finish)

sealed trait Letters
case object B extends Letters
case object A extends Letters

// Exiting paste mode,now interpreting.

defined trait Letters
defined object B
defined object A

scala> shapeless.Generic[Letters]
res5: shapeless.Generic[Letters]{type Repr = shapeless.:+:[A.type,shapeless.:+:[B.type,shapeless.CNil]]} = anon$macro$45$1@71a11be4

如果这是您想要的,那么您已经完成了设置 – 只需找到关于无形通用推导的good tutorial并计算出详细信息.不幸的是,在大多数情况下,它可能不是你想要的(东方,北方,南方,西方?蓝色,绿色,红色?),你想要的(定义排序)似乎并不合理.

(编辑:李大同)

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

    推荐文章
      热点阅读