私はF#を学んでいますが、私はうまく動作していますが、私は完全に理解していないことを書いています。ここでは方法のgetCredentials、家庭、言及、メッセージ、ShowHelp関数は、たとえば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
だ、とclearAllSettingsは、すべての単純な関数であり、あなたが期待するものを行います。 (?はい、それはTwitterクライアントだ、新しい 'Hello Worldの' デモということではありません)
ライン:私が望むよう
[fun() -> getCredentials(); home 20; mentions 20; messages 20]
が働きます。それはgetCredentialsを呼び出し、次にhomeを呼び出して、次にメッセージを返します。
私の見解では、セミコロンは文の区切り文字のように動作しています。私は以前これを説明していない。それはここで何が起こっているのですか?
これを書くためにもっと慣れ親しんでいる方法がありますか(言い換えれば、熟練したF#プログラマーがフロアに座って、これを見て笑ったでしょうか?
詳細情報:私の元の目的は、アクションのリストを作成してから、オプションを発見するときにアクションを追加することでした。 C#で私は通常、リスト<アクション>()でこれを行います。セミコロンのことは、もともと私はそれを書こうとしたので驚いた:
[getCredentials; home 20; mentions 20; messages 20]
しかし、コンパイラはそれを好まなかった。
まあ、周りの言語仕様を掘るの数時間は、答えを明らかにする。それは、冗長な構文と呼ばれる構文の形式です。ここにそれを説明するリンクがあります:http://msdn.microsoft.com/en-us/library/dd233199.aspx私は、コマンドライン引数を解析する私のアプローチがF# 'ersのやり方であるかどうかは疑問です。 –