Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 编译器无法识别定义的类型_F# - Fatal编程技术网

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 =

出于某种原因,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 =
    (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
结尾。在任何情况下,我的观点是,它们可以有相同类型的有效载荷,如果它们有,你必须以其他方式区分它们。这就是名字的意义。否则,通过阅读可以很容易地回答这个问题。当你对基本的语言概念有疑问时,养成这样的习惯并不是一个坏主意。