배열에 전달한 다음 값을 인쇄 할 수있는 간단한 F # 함수를 작성하려고하는데 문제가 있습니다. 여기 내가 지금까지 가지고있는 것입니다 :배열을 함수로 전달
let a = [| a; b; c; d |];;
let f arrayFunction (string[] array) = function
for b=0 to array.Length
Console.WriteLine(array.[]);;
배열에 전달한 다음 값을 인쇄 할 수있는 간단한 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
은 익명 패턴 일치 기능을 만들기위한 것입니다. 그러나 for
루프의 끝에는 do
을 추가해야합니다. 마지막으로 F # for
루프에있는 to
뒤에 오는 값이 포함됩니다. 따라서 배열 길이에서 하나를 뺀 것이 아니면 결국 IndexOutOfRangeException가 발생합니다.
귀하의 기능은 다음과 같이 작성해야합니다 :
let a = [| a; b; c; d |];;
let f arrayFunction (array : string[]) =
for b = 0 to array.Length - 1 do
Console.WriteLine (array.[b]);;
잭의 대답은 F에 # 그러나이 내장되어 기능은 작업의 이러한 종류를 할 정확하게 맞습니다. 이 예에서는 Array.iter에 배열을 보내 각 항목을 반복하고 문자열 -> unit 함수로 항목을 전달합니다.
그래서 예는 다음과 같습니다
let a = [| "a"; "b"; "c"; "d" |];;
let f arrayFunction (array : string[]) =
array |> Array.iter arrayFunction;;
a |> f Console.WriteLine;;
오, 고마워. 그리고이 함수를 호출하려면 다음을 사용할 수 있습니다. arraryFunction (a) ;; ? –
@JohnOriely arrayFunction (귀하의 예제에서와 같이)는 매개 변수이며,이 경우에는 함수 인 매개 변수입니다. Console.WriteLine을 예제의 마지막 줄에있는 arrayFunction 매개 변수로 전달하는 f 함수를 호출합니다. –
@ Gary.S 입력이 배열 인 경우 Seq.iter가 아닌 Array.iter를 사용해야합니다. 후자는 열거자를 사용하여 루프 대신 배열을 트래버스하기 때문에 속도가 느립니다. –
를 다른 답변에 추가 - 당신은 명시 적으로 배열 인수의 유형을 지정할 필요가 없었다. 타입 추론은 일반적으로 (넓은 컨텍스트에 따라) 잘 처리합니다. 예를 들면 다음과 같습니다.
let a = [| "a"; "b"; "c"; "d" |]
let f arrayFunction array =
array |> Seq.iter arrayFunction
let printme s = printfn "%s" s
f printme a
와우 그게 완벽합니다. 도와 주셔서 감사합니다. –