Noe*_*l M 5 scala generic-programming shapeless
是否可以在Scala中自动派生密封特征族的订单?
例如,能够这样做会很高兴:
sealed trait Letters
case object A extends Letters
case object B extends Letters
(A < B) == True
Run Code Online (Sandbox Code Playgroud)
这感觉就像Shapeless可以处理的东西,但我不知道这是否存在.
我假设您希望排序反映定义的顺序,而不是按构造函数的名称排序.
这并不像您期望的那样有趣,因为knownDirectSubclasses在ClassSymbolAPI上返回一组符号,而不是有序序列.我不是scalac内部的专家,但根据Eugene Burmako(他是),签名knownDirectSubclasses只反映了scalac中发生的事情.
顺便说一下,我多年来一直在抱怨这个问题,在不同的方面,我尝试过读符号等位置的东西,但它并没有真正起作用.
无形的通用机械必须在这里作出决定,因为它代表密封的特征作为副产品,它们对它们的元素进行排序.为了保持事物的确定性,它使用构造函数的名称来对案例进行排序:
// 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
Run Code Online (Sandbox Code Playgroud)
如果这是您想要的,那么您已经完成了设置 - 只需找到一个关于无形通用推导的好 教程并详细说明.不幸的是在大多数情况下,这可能不是你想要的,虽然(East,North,South,West?Blue,Green,Red?),你想要什么(定义排序)似乎没有合理可行的.
| 归档时间: |
|
| 查看次数: |
804 次 |
| 最近记录: |