2

我正在尝试编写一个简单的 F# 函数,我可以将一个数组传递到该函数中,然后打印这些值,但是我遇到了麻烦。这是我到目前为止所拥有的:

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

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

3 回答 3

6

用于定义参数的 F# 语法是 C# 语法的倒退;在 F# 中,首先是参数的名称,然后是类型(用冒号分隔两者)。

你也不需要function这里的关键字,只是普通的let绑定——function用于创建匿名模式匹配函数。但是,您确实需要在循环do的行尾添加 a 。for最后,toF#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]);;
于 2013-04-28T16:39:22.417 回答
3

Jack 的回答是完全正确的,但是 F# 中有内置函数可以完成这些任务。在这种情况下,我们可以将数组发送到 Array.iter,它将遍历每个项目并将该项目传递给一个字符串 -> 单元函数。

因此,一个示例可能如下所示:

let a = [| "a"; "b"; "c"; "d" |];;
let f arrayFunction (array : string[]) =
    array |> Array.iter arrayFunction;;

a |> f Console.WriteLine;;
于 2013-04-28T20:18:24.197 回答
1

除了其他答案 - 您不需要明确指定数组参数的类型。类型推断通常可以很好地处理它(取决于更广泛的上下文)。因此,例如,这有效:

let a = [| "a"; "b"; "c"; "d" |]
let f arrayFunction array =
    array |> Seq.iter arrayFunction

let printme s = printfn "%s" s
f printme a
于 2013-04-29T13:06:36.233 回答