最新围棋通用设计简明指南

2020-06-18 22:38:41

最近,围棋团队宣布了他们围棋提案中泛型的最新设计草案。它详细介绍了做出某些决定的原因、实施细节等。

在本文中,我的目标是总结即将发生的主要变化,因为整个设计草案可能会让很多人感到厌烦。

我将提供一些代码片段来演示主要功能,并让您有机会体验它们,这要归功于新的支持泛型的围棋游乐场。

下面是在类型参数上没有任何约束的泛型函数的外观:

要在泛型类型上添加约束,您可以要求它实现给定的接口:

编写多个类型参数的约束的方式与编写函数参数类型的方式相同:

您可以基于一组受支持的类型来约束类型,而不是基于一组方法来约束类型。例如,您可以指定接受只能是int或long的泛型类型。

例如,您可以利用“小于”、“大于”等运算符,这些运算符仅适用于围棋中的基本类型:

您还有一个称为比较的开箱即用约束,它将类型约束为支持==和!=运算符的类型。

使用这些约束类型列表和/或可比较类型的接口不能由结构实现。

可以使用泛型类型定义结构。在类型声明中指定之后,不需要为该类型的所有函数指定类型:

您也可以在接口中执行此操作。当类型约束依赖于自身时,这尤其有用。

例如,您有一个T的类型约束,它需要一个接受T参数的EQUAL方法:

如果您需要指定一个类型参数,该参数具有状态修改功能(例如setter),那么您可以指定一个指针类型约束:

请注意,上面的示例要求您显式指定将在函数-FromStrings(可设置)…中使用的类型。

这是因为只要类型不作为函数参数出现,一旦编译代码,编译器就无法推断实际类型。因此,您需要显式指定它。

这篇文章故意简明扼要,直截了当。希望它能帮助您在喝早餐咖啡的同时,快速了解最新的仿制药草案设计。

然而,在围棋中围绕泛型的任何单一设计选择背后都有很大的理论基础。如果您有兴趣更深入地研究这个主题,请查看官方的设计草案文档。