这个表达式应该有类型 unit 但这里有一个类型 'a list
This expression was expected to have type unit but here has a type 'a list
这里我有一个功能。在 List.append [0] free_list
行中,它抱怨 This expression was expected to have type unit but here has a type 'a list
,我不清楚它是如何推断出该语句必须具有单位类型的。
let free_list=[]
let find_free_spaces :List<int>=
if 1=1 // The condition is not important
then List.append [0] free_list
free_list
编译器告诉您 List.append [0] free_list
return 是 int list
类型的值,但它希望您的 if then
表达式是 unit
类型,因为你没有 else
条件。如果您添加了一个 else
条件,该条件也 return 编辑了一个 int list
,编译器错误将变成警告,提示您忽略了表达式的结果。
F# 是一种表达式而不是基于语句的语言,这意味着 if then else...
等 return 值(因此那些 returned 值 必须 在每种情况下都是相同的类型)。
另请记住,F# 列表是不可变的,因此附加列表不会产生向现有列表添加值的副作用,它会创建一个包含原始值和附加值的新列表。
就目前而言,您的代码将采用一个列表,构建一个包含 0 和您提供的列表的新列表,不对该新列表执行任何操作,最后 return 您提供的原始列表.如果你确实想要这种行为(出于某种原因),你可以将 List.append [0] free_list
的结果通过管道传递给 ignore
函数,这将明确表明你忽略了 [=12= 的结果] 表达式。
在 F# 中,if/then
和 if/then/else
是 表达式 ,而不是 语句 (如果您要在 C# 中,if x then y else z
类似于 x ? y : z
)。如果有一个 else
子句,那么该分支的类型必须与 if
分支的类型相匹配,这样整个表达式才是正确类型的。如果没有 else
,那么 if
的主体必须具有类型 unit
,否则结果将被忽略(基本上,if x then y
等同于 if x then y else ()
).
这里我有一个功能。在 List.append [0] free_list
行中,它抱怨 This expression was expected to have type unit but here has a type 'a list
,我不清楚它是如何推断出该语句必须具有单位类型的。
let free_list=[]
let find_free_spaces :List<int>=
if 1=1 // The condition is not important
then List.append [0] free_list
free_list
编译器告诉您 List.append [0] free_list
return 是 int list
类型的值,但它希望您的 if then
表达式是 unit
类型,因为你没有 else
条件。如果您添加了一个 else
条件,该条件也 return 编辑了一个 int list
,编译器错误将变成警告,提示您忽略了表达式的结果。
F# 是一种表达式而不是基于语句的语言,这意味着 if then else...
等 return 值(因此那些 returned 值 必须 在每种情况下都是相同的类型)。
另请记住,F# 列表是不可变的,因此附加列表不会产生向现有列表添加值的副作用,它会创建一个包含原始值和附加值的新列表。
就目前而言,您的代码将采用一个列表,构建一个包含 0 和您提供的列表的新列表,不对该新列表执行任何操作,最后 return 您提供的原始列表.如果你确实想要这种行为(出于某种原因),你可以将 List.append [0] free_list
的结果通过管道传递给 ignore
函数,这将明确表明你忽略了 [=12= 的结果] 表达式。
在 F# 中,if/then
和 if/then/else
是 表达式 ,而不是 语句 (如果您要在 C# 中,if x then y else z
类似于 x ? y : z
)。如果有一个 else
子句,那么该分支的类型必须与 if
分支的类型相匹配,这样整个表达式才是正确类型的。如果没有 else
,那么 if
的主体必须具有类型 unit
,否则结果将被忽略(基本上,if x then y
等同于 if x then y else ()
).