在打字球拍中是否有表达 Null 的惯用方式?

问题描述 投票:0回答:1

我想在 Typed Racket 中使用

struct
定义一个类型。例如:

(struct a-node 
    ([line : ProgLine]
    [latency : Integer]
    [pred-edges : (List Edge)]
    [succ-edges : (List Edge)])
    #:mutable
    #:type-name Node)

假设我想用一些“空”值初始化一个字段(例如

line
),然后稍后更新该字段(
a-node-line
)。我通常在搜索引擎上寻找一种惯用的方式,同样,在这里,我还没有找到令人满意的答案。我尝试过例如:

[line : (U ProgLine Void)]

然而,这会导致代码变得笨拙。我玩过使用也许单子,但这也不是我正在寻找的。它对于某些用例来说非常有用,但有时并不适用。我写了很多Scheme(其中可以表达

#f
'()
),但没有写太多Racket。我的静态类型语言背景属于 C 家族,其中可以表示
NULL
nullptr
等。在 Typed Racket 中表达指针变量“null”的惯用方式是什么?

对于上下文,我正在为编译器的后端构建一个调度程序,并且

Node
用于依赖关系图中的节点。这些
Node
结构将是邻接列表表示(双向)的邻接列表向量的哨兵/列表头。我在程序 IR 上以线性方式构建图表。在 IR 的顶部->底部遍历之前,我想初始化邻接向量,然后在构建过程中更新节点结构。

null racket void typed-racket
1个回答
0
投票

惯用的方法是使用

Option
类型,您可以在此处的 文档中找到

请注意,这本质上相当于使用

#f
作为值的“空”版本。 Racket 还有一个很好的特性,即除
#f
之外的任何值都是真实的,因此我们可以通过执行以下操作来检查“空性”:

(if my-value
   "value-case"
   "null-case")
© www.soinside.com 2019 - 2024. All rights reserved.