假设我有一个类型系统,除了
null
值外,它还具有三种基本类型:
bool
num
string
此外,每种类型都有一个类型化数组,所以我们现在有:null、
bool
、bool[]
、num
、num[]
、string
和string[]
我们的类型。
最后,我们有一个可以包含任何其他类型的
Any
类型。例如,我们可能有这样的两列:
id(编号) | 值(任何) |
---|---|
1 | “abc” |
2 | [1,2,3] |
3 | [1, 真] ?? |
然后我的问题是
any[]
值,例如 [1, true]
是否也包含在 any
类型中(因为它可以是“任何东西”),或者 [1, true]
不是该类型的有效值?换句话说,我的类型系统需要什么“类型”——下面的选项 1 或选项 2?
bool
、bool[]
、num
、num[]
、string
、string[]
和 any
bool
、bool[]
、num
、num[]
、string
、string[]
、any
和any[]
而且,如果我们只需要第一个版本,那么它是否支持递归,例如
[[1, true], [2, "hi"]]
(这是两个级别,即 any[][]
等等),那么锯齿状数组呢,例如 [[1,"a"], 0]
?
具有(可能不自然)限制的类型系统仍然是类型系统。
您提出的任何可能性都可以定义语法,完全指定和实现。你甚至可以做其他事情,比如只允许递归到固定深度,或者有单独的锯齿状和非锯齿状嵌套数组类型。
类型系统是否可以以这些方式工作的问题的答案在每种情况下都是肯定的。
如果您自己决定类型系统,那么问题就变成了您是否应该允许
any[]
以及any
是否应该允许嵌套数组。该问题的答案取决于您使用类型系统的原因是什么。这里没有适用于所有情况的最佳答案。