我想在typed/rack中使用struct定义一个类型。例如:
(struct a-node
([line : ProgLine]
[latency : Integer]
[pred-edges : (List Edge)]
[succ-edges : (List Edge)])
#:mutable
#:type-name Node)
假设我想用some('((|void |#f|…(初始化某个字段(例如line
(值,然后稍后更新字段(a-node-line
(。我已经在搜索引擎上寻找了一种惯用的方法,同样,在这里,我也没有找到满意的答案。我尝试过例如:
[line : (U ProgLine Void)]
但这导致了代码的尴尬。我玩过可能使用monad的游戏,但这也不是我想要的。它对某些用例来说很好,但有时并不合适。我已经写了大量的scheme(其中可以表示{#f}或{'((}(,但没有太多的麻烦。我的静态类型语言背景属于C族,在C族中可以表示{null}。有这样的";简单的";类型球拍中指针变量nil的表示方法?
对于上下文,我正在为编译器的后端构建一个调度器,Node用于依赖关系图中的节点。这些节点结构将是相邻列表表示(双向(的相邻列表向量的哨兵/列表头。我在程序IR上以线性方式构建图。在顶部之前->在IR的底部遍历中,我想初始化邻接向量,然后在构建图的过程中更新Node结构。
但我对一般情况下的问题很感兴趣,因为我现在在用打字/球拍写作时遇到过太多次了。。。
惯用方法是使用Option
类型,您可以在此处的文档中找到它。
注意,这基本上相当于使用CCD_;空";值的版本。Racket还有一个很好的性质,即除了#f
之外的任何值都是真实的,所以我们可以检查";零度";通过做:
(if my-value
"value-case"
"null-case")