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