Swift 是不是支持新的数据类型和代数数据类型?

Posted

技术标签:

【中文标题】Swift 是不是支持新的数据类型和代数数据类型?【英文标题】:Does Swift support new data types and algebraic data types?Swift 是否支持新的数据类型和代数数据类型? 【发布时间】:2021-06-05 07:25:44 【问题描述】:

在 Swift 和许多其他语言中,内置了字符串、整数等数据类型...

例如,在Haskell 中,可以使用关键字data 来创建自己的数据类型。

数据形状 = 圆形浮点数浮点数 |矩形浮点数浮点数 浮动

但是,我不确定 Swift 是否有类似的方法,或者它是否支持新的数据类型。

【问题讨论】:

【参考方案1】:

是的,Wikipedia 将 Swift 列为支持代数数据类型的语言之一。

仅仅引用 Wikipedia 并不是很有说服力 :D,所以让我们在 Swift 中显示您的 Shape 类型。这是通过具有关联值的枚举来实现的。

enum Shape 
    case circle(Float, Float, Float)
    case rectangle(Float, Float, Float, Float)

Haskell 中的Circle 1 2 3 将转换为 Swift 中的Shape.circle(1, 2, 3)

您还可以为这些关联值添加标签:

enum Shape 
    case circle(centerX: Float, centerY: Float, radius: Float)
    case rectangle(x: Float, y: Float, width: Float, height: Float)

详细了解枚举与关联类型here。

另一个例子是 Haskell 列表类型:

indirect enum List<T> 
    case `nil`
    case cons(T, List<T>)

请注意,与 Haskell 不同,这不是列表在 Swift 中实际上实现的方式。

【讨论】:

谢谢@Sweeper,这是一种非常巧妙的解释方式。

以上是关于Swift 是不是支持新的数据类型和代数数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

python支持的数据类型

多态编码的递归代数数据类型的值是多少?

如何制作代数数据类型列表

Spark MLlib数据类型

Spark MLlib数据类型

Spark MLlib数据类型