F# Interactive (fsi.exe) 參考
F# Interactive (fsi.exe) 在主控台中,以互動方式用於執行 F# 程式碼,或執行 F# 指令碼。 換句話說,F# Interactive 會執行 F# 語言的 REPL (讀取、評估、列印迴圈)。
F# 互動式程式設計
F# Interactive 可用於在 Visual Studio 中的主控台或視窗中,撰寫程式碼。
若要從主控台執行 F# Interactive,請執行 fsi.exe。 您可以在 “c:\Program Files (x86)\Microsoft SDKs\F#\<版本>\Framework\<版本>\” 中找到 fsi.exe。 如需可用的命令列選項詳細資訊,請參閱F# Interactive 選項。
若要透過 Visual Studio 執行 F# Interactive,您可以按一下標記為 [F# Interactive] 的適當工具列按鈕,或使用按鍵 Ctrl+Alt+F。 如此會開啟互動式視窗,也就是執行 F# Interactive 工作階段的工具視窗。 您也可以選取要在互動式視窗中執行的部分程式碼,然後點擊按鍵組合 ALT + ENTER。 F# Interactive 會隨即在標示為 [F# Interactive] 的工具視窗中啟動。 當您使用這個按鍵組合時,請確定編輯器視窗具有焦點。
不論是使用主控台還是否 Visual Studio,命令提示字元都會出現,表示解譯器在等待您輸入。 您可以如同在程式碼檔案中一樣輸入程式碼。 若要編譯並執行程式碼,請輸入兩個分號 (;;) 以終止一行或數行的輸入。
F# Interactive 會嘗試編譯程式碼,如果成功的話,它會執行程式碼,並列印它所編譯的類型與值的簽章。 如果發生錯誤,解譯器就會列印錯誤訊息。
在同一個工作階段中輸入的程式碼,可以存取先前輸入的所有建構,因此您可以建置程式。 若有需要,可利用 [工具] 視窗中的延伸緩衝區,視需要將程式碼複製到檔案。
在 Visual Studio 中執行 F# Interactive 時,會與專案分開執行,因此,舉例來說,除非您將函式的程式碼複製到 [互動] 視窗,否則無法使用在 F# Interactive 中專案內所定義的建構。
如果您開啟了參考某些程式庫的專案,則可以透過 [方案總管] 參考 F# Interactive 中的這些程式庫。 若要參考 F# Interactive 中的程式庫,請展開 [參考] 節點,開啟程式庫的捷徑功能表,然後選擇 [傳送至 F# Interactive]。
您可以調整設定來控制 F# Interactive 命令列引數 (選項)。 在 [工具] 功能表上,選取 [選項...],然後展開 [F# 工具]。 您只能變更 F# Interactive 選項和 [64 位元 F# Interactive] 這兩項設定,而且只有在 64 位元電腦上執行 F# Interactive 時才相關。 這項設定會判斷您要執行專用的 64 位元版 fsi.exe 或 fsianycpu.exe,它會使用電腦架構判斷要以 32 位元或 64 位元處理序執行。
F# 指令碼作業
指令碼使用副檔名 .fsx 或 .fsscript。 您可以只要執行 fsi.exe,並指定 F# 原始程式碼的指令碼檔名,F# Interactive 就會即時讀取程式碼並執行程式碼,而不是編譯原始程式碼,然後稍後再執行已編譯的組件。
Interactive、指令碼與編譯環境之間的差異
當您編譯 F# Interactive 中的程式碼時,無論是以互動方式執行或是執行指令碼,都會定義符號 INTERACTIVE。 當您在編譯器中編譯程式碼時,會定義符號 COMPILED。 因此,如果已編譯模式和互動式模式中的程式碼必須不同,可以使用條件式編譯的前置處理器指示詞,決定要使用哪一種模式。
當您要在 F# Interactive 中執行在執行編譯器時無法使用的指令碼時,有一些指示詞可用。 下表摘要說明使用 F# Interactive 時可用的指示詞。
指示詞 |
描述 |
---|---|
#help |
顯示可用指示詞的詳細資訊。 |
#I |
指定加上引號的組件搜尋路徑。 |
#load |
讀取原始程式檔、進行編譯,並加以執行。 |
#quit |
終止 F# Interactive 工作階段。 |
#r |
參考組件。 |
#time ["on"|"off"] |
#time 會自行切換是否顯示效能資訊。 當它啟用時,F# Interactive 會測量所解譯及執行的每個程式碼區段之即時、CPU 時間及記憶體回收資訊。 |
當您在 F# Interactive 中指定檔案或路徑時,應該要有一個字串常值。 因此,檔案和路徑必須以引號括住,並遵循一般的逸出字元。 此外,您可以使用 @ 字元,讓 F# Interactive 能將包含路徑的字串,解譯為逐字字串。 這會導致 F# Interactive 會忽略所有逸出字元。
已編譯模式和互動式模式之間,其中一項差異是存取命令列引數的方式。 在已編譯模式中,使用 GetCommandLineArgs。 在指令碼中,使用 fsi.CommandLineArgs。
下列程式碼說明如何建立可讀取指令碼中命令列引數的函式,同時也會示範如何從指令碼參考另一個組件。 第一個程式碼檔案 MyAssembly.fs 是被參考之組件的程式碼。 使用命令列 fsc -a MyAssembly.fs 編譯這個檔案,然後使用命令列 fsi --exec file1.fsx test 以指令碼形式執行第二個檔案
// MyAssembly.fs
module MyAssembly
let myFunction x y = x + 2 * y
// file1.fsx
#r "MyAssembly.dll"
printfn "Command line arguments: "
for arg in fsi.CommandLineArgs do
printfn "%s" arg
printfn "%A" (MyAssembly.myFunction 10 40)
其輸出如下:
file1.fsx
test
60
相關主題
標題 |
描述 |
---|---|
說明 fsi.exe 這個 F# Interactive 的命令列語法與選項。 |
|
說明在 F# Interactive 中執行程式碼時,所提供的程式庫功能。 |