私は F# を学んでいて、機能するものを書いているが、完全には理解していないことに気づきました。これが例です
let processArgs args =
match args with
| null
| [||] -> [fun() -> getCredentials(); home 20; mentions 20; messages 20]
| [|"-h"|]
| [|"-?"|] -> [showHelp]
| [|"-reset"|] -> [clearAllSettings]
| _ -> [fun() -> printfn "%s" (String.Join(" ", args))]
[<EntryPoint>]
let main (args:string[]) =
try
let actions = processArgs args
List.iter (fun action -> action()) actions
0
finally
Console.ResetColor()
Console.CursorVisible <- true
メソッド getCredentials、home、mention、messages、showHelp、および clearAllSettings はすべて単純な関数であり、期待どおりに機能します。(はい、これは Twitter クライアントです。新しい 'Hello World' デモではありませんか?)
この線:
[fun() -> getCredentials(); home 20; mentions 20; messages 20]
私が望むように動作します。getCredentials、ホーム、メンション、メッセージの順に呼び出します
私の観点からは、セミコロンはステートメント区切りのように機能しています。私はこれが以前に説明されているのを見たことがありません。それがここで起こっていることですか?
これをもっと慣用的な方法で書くことはできますか (つまり、経験豊富な F# プログラマーは、これを見たときに笑い転げるでしょうか)。
詳細情報: 私の当初の意図は、アクションのリストを作成し、オプションを見つけたらアクションを追加することでした。C# では通常、これを List< Action >() で行います。もともと私は次のように書こうとしたので、セミコロンのことは私を驚かせました:
[getCredentials; home 20; mentions 20; messages 20]
しかし、コンパイラはそれを好まなかった。