我正在尝试编写一个简单的 F# 函数,我可以将一个数组传递到该函数中,然后打印这些值,但是我遇到了麻烦。这是我到目前为止所拥有的:
let a = [| a; b; c; d |];;
let f arrayFunction (string[] array) = function
for b=0 to array.Length
Console.WriteLine(array.[]);;
用于定义参数的 F# 语法是 C# 语法的倒退;在 F# 中,首先是参数的名称,然后是类型(用冒号分隔两者)。
你也不需要function
这里的关键字,只是普通的let
绑定——function
用于创建匿名模式匹配函数。但是,您确实需要在循环do
的行尾添加 a 。for
最后,to
F#for
循环中的值是包容性的——因此您需要从数组长度中减去 1,否则最终会引发 IndexOutOfRangeException。
你的函数应该这样写:
let a = [| a; b; c; d |];;
let f arrayFunction (array : string[]) =
for b = 0 to array.Length - 1 do
Console.WriteLine (array.[b]);;
Jack 的回答是完全正确的,但是 F# 中有内置函数可以完成这些任务。在这种情况下,我们可以将数组发送到 Array.iter,它将遍历每个项目并将该项目传递给一个字符串 -> 单元函数。
因此,一个示例可能如下所示:
let a = [| "a"; "b"; "c"; "d" |];;
let f arrayFunction (array : string[]) =
array |> Array.iter arrayFunction;;
a |> f Console.WriteLine;;
除了其他答案 - 您不需要明确指定数组参数的类型。类型推断通常可以很好地处理它(取决于更广泛的上下文)。因此,例如,这有效:
let a = [| "a"; "b"; "c"; "d" |]
let f arrayFunction array =
array |> Seq.iter arrayFunction
let printme s = printfn "%s" s
f printme a