将数组传递给Function

时间:2013-04-28 16:20:27

标签: .net f#

我正在尝试编写一个简单的F#函数,我可以将数组传入然后打印值,但是我遇到了麻烦。以下是我到目前为止的情况:

let a = [| a; b; c; d |];;

let f arrayFunction (string[] array) = function
    for b=0 to array.Length
      Console.WriteLine(array.[]);;

3 个答案:

答案 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