【发布时间】:2023-03-11 06:50:01
【问题描述】:
由于某种原因,F# 无法识别我定义的类型。我有几种类型:
type point = int * int
type colour = int * int * int
type figure =
| Circle of point * int * colour
| Rectangle of point * point * colour
| Mix of figure * figure
point 和 colour 类型工作正常,但是当我尝试编译如下函数时:
let testFig : figure =
(50,50), 45, (255,0,0)
编译器抛出一个fs001 异常,并说它预期figure 但得到(int*int) * int * (int*int*int)(这是图中的一部分!)。
我有点迷茫,不明白为什么它不起作用。
【问题讨论】:
-
您希望它如何工作?例如,您如何区分创建
Circle和Rectangle? -
该类型将用于函数中,该函数使用模式加工,因此区别应该只是将其定义为
let testCircle = (50,50), 45, (255,0,0)或let testRect = (0,0), (50,50) (255,0,0),例如。那么模式匹配就可以得到所有的参数 -
哦,对不起,我误认为它们具有相同的有效负载类型,因为我猜它们都以
int结尾。无论如何,我的观点是它们可以具有相同类型的有效载荷,如果它们有,你必须以其他方式区分它们。这就是名称的用途。否则,这可以通过阅读the language reference 轻松回答。当您对基本语言概念有疑问时,养成参考它的习惯并不是一个坏主意。
标签: f#