Tôi đang học F # và thấy rằng tôi đang viết những thứ hoạt động nhưng tôi hoàn toàn không hiểu. Dưới đây là ví dụBiểu thức F # lambda với nhiều câu lệnh
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
Phương thức getCredentials, home, mentions, messages, showHelp và clearAllSettings là tất cả các chức năng đơn giản và làm những gì bạn mong đợi. (Vâng, đó là một khách hàng twitter, mà không phải là mới 'Hello World' demo?)
Dòng:
[fun() -> getCredentials(); home 20; mentions 20; messages 20]
công trình như tôi muốn. Nó gọi getCredentials, rồi về nhà, sau đó đề cập đến, sau đó nhắn tin
Từ quan điểm của tôi, dấu chấm phẩy hoạt động như một dấu tách câu lệnh. Tôi chưa từng thấy điều này được mô tả trước đây. Đó là những gì đang xảy ra ở đây?
Có cách viết thành ngữ nào hơn không (nói cách khác, một cuộn lập trình F # dày dặn trên sàn cười khi họ nhìn thấy điều này)?
Thông tin khác: Mục đích ban đầu của tôi là có danh sách tác vụ và sau đó thêm hành động khi tôi khám phá các tùy chọn. Trong C#, tôi thường làm điều này với Danh sách < Hành động>(). Điều bán dấu chấm phẩy làm tôi ngạc nhiên vì ban đầu tôi đã cố gắng viết nó như sau:
[getCredentials; home 20; mentions 20; messages 20]
Nhưng trình biên dịch không thích nó.
Vâng, một vài giờ đào bới xung quanh đặc tả ngôn ngữ cho thấy câu trả lời. Đó là một dạng cú pháp được gọi là cú pháp dài dòng. Đây là một liên kết mô tả nó: http://msdn.microsoft.com/en-us/library/dd233199.aspx Tôi vẫn tự hỏi nếu cách tiếp cận của tôi để phân tích các đối số dòng lệnh là cách F # 'ers sẽ làm điều đó. –