F# 编译器无法识别定义的类型
出于某种原因,F#无法识别我定义的类型。我有几种类型:F# 编译器无法识别定义的类型,f#,F#,出于某种原因,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 点和颜色类型工作正常,但当我尝试编译如下函数时: let testFig : figure =
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
点
和颜色
类型工作正常,但当我尝试编译如下函数时:
let testFig : figure =
(50,50), 45, (255,0,0)
编译器抛出一个fs001
异常,并说它期望figure
但得到(int*int)*int*(int*int*int)
(这是figure的一部分!)
我有点不知所措,不明白为什么它不起作用。要创建
图
值,需要指定要创建的案例的名称。例如,如果要创建圆圈
,则需要编写:
let testFig : figure =
Circle((50,50), 45, (255,0,0))
没有
圆
构造函数,只需创建一个值(50,50),45,(255,0,0)
,它的类型为(int*int)*int*(int*int*int)
。这与point*int*color
相同(因为point
和color
只是别名)。要创建图
值,需要指定要创建的案例名称。例如,如果要创建圆圈
,则需要编写:
let testFig : figure =
Circle((50,50), 45, (255,0,0))
没有
圆
构造函数,只需创建一个值(50,50),45,(255,0,0)
,它的类型为(int*int)*int*(int*int*int)
。这与point*int*color
相同(因为point
和color
只是别名)。您认为这将如何工作?例如,您如何区分创建一个圆和一个矩形呢?该类型将用于一个使用patren-maching的函数中,因此区别应该是将其定义为let-testCircle=(50,50),45,(255,0,0)
或let-testRect=(0,0),(50,50)(255,0)
。然后模式匹配就可以得到所有的参数了,抱歉,我错把它们理解为具有相同的有效负载类型,因为它们都以int
结尾。在任何情况下,我的观点是,它们可以有相同类型的有效载荷,如果它们有,你必须以其他方式区分它们。这就是名字的意义。否则,通过阅读可以很容易地回答这个问题。当你对基本的语言概念有疑问时,养成这样的习惯并不是一个坏主意。你认为这会起什么作用?例如,您如何区分创建一个圆和一个矩形呢?该类型将用于一个使用patren-maching的函数中,因此区别应该是将其定义为let-testCircle=(50,50),45,(255,0,0)
或let-testRect=(0,0),(50,50)(255,0)
。然后模式匹配就可以得到所有的参数了,抱歉,我错把它们理解为具有相同的有效负载类型,因为它们都以int
结尾。在任何情况下,我的观点是,它们可以有相同类型的有效载荷,如果它们有,你必须以其他方式区分它们。这就是名字的意义。否则,通过阅读可以很容易地回答这个问题。当你对基本的语言概念有疑问时,养成这样的习惯并不是一个坏主意。