简单的闭包函数
Simple closure function
我有以下代码
let f2 x:int =
fun s:string ->
match x with
| x when x > 0 -> printfn "%s" s
| _ -> printfn "%s" "Please give me a number that is greater than 0"
编译器抱怨:
Unexpected symbol ':' in lambda expression. Expected '->' or other token.
我做错了什么?
您必须在类型注释两边加上括号:
let f2 (x : int) =
fun (s : string) ->
match x with
| x when x > 0 -> printfn "%s" s
| _ -> printfn "%s" "Please give me a number that is greater than 0"
另请注意,如果您像示例中一样省略了 x
周围的括号,这将意味着函数 f2
return 是一个 int,而不是约束 [= 的类型13=] 为整数。
评论更新:
Why if I omit the parentheses around x, this would mean the function f2 returns an int?
因为这就是您指定 return 类型函数的方式。
这在 C# 中会是什么:
ReturnTypeOfFunction functionName(TypeOfParam1 firstParam, TypeOfParam2 secondParam) { ... }
在 F# 中看起来像这样:
let functionName (firstParam : TypeOfParam1) (secondParam : TypeOfParam2) : ReturnTypeOfFunction =
// Function implementation that returns object of type ReturnTypeOfFunction
可以找到更详细的解释on MSDN。
或者让编译器推断类型。试试这个:
let f2 x =
fun s ->
match x with
| x when x > 0 -> printfn "%s" s
| _ -> printfn "%s" "Please give me a number that is greater than 0"
您有两个相同问题的实例。定义函数时,在签名末尾加上:*type*
表示函数returns是那个类型。在这种情况下,您表示您有一个函数 f2
,它接受一个参数和 returns 一个 int
。要修复它,您需要在注释周围加上括号。该语法在 lambda 中不起作用,因此您只会收到编译错误。
我有以下代码
let f2 x:int =
fun s:string ->
match x with
| x when x > 0 -> printfn "%s" s
| _ -> printfn "%s" "Please give me a number that is greater than 0"
编译器抱怨:
Unexpected symbol ':' in lambda expression. Expected '->' or other token.
我做错了什么?
您必须在类型注释两边加上括号:
let f2 (x : int) =
fun (s : string) ->
match x with
| x when x > 0 -> printfn "%s" s
| _ -> printfn "%s" "Please give me a number that is greater than 0"
另请注意,如果您像示例中一样省略了 x
周围的括号,这将意味着函数 f2
return 是一个 int,而不是约束 [= 的类型13=] 为整数。
评论更新:
Why if I omit the parentheses around x, this would mean the function f2 returns an int?
因为这就是您指定 return 类型函数的方式。
这在 C# 中会是什么:
ReturnTypeOfFunction functionName(TypeOfParam1 firstParam, TypeOfParam2 secondParam) { ... }
在 F# 中看起来像这样:
let functionName (firstParam : TypeOfParam1) (secondParam : TypeOfParam2) : ReturnTypeOfFunction =
// Function implementation that returns object of type ReturnTypeOfFunction
可以找到更详细的解释on MSDN。
或者让编译器推断类型。试试这个:
let f2 x =
fun s ->
match x with
| x when x > 0 -> printfn "%s" s
| _ -> printfn "%s" "Please give me a number that is greater than 0"
您有两个相同问题的实例。定义函数时,在签名末尾加上:*type*
表示函数returns是那个类型。在这种情况下,您表示您有一个函数 f2
,它接受一个参数和 returns 一个 int
。要修复它,您需要在注释周围加上括号。该语法在 lambda 中不起作用,因此您只会收到编译错误。