了解如何在 Exercism 上測試你的 Unison 練習
Unison Codebase Manager(UCM)是一個執行 Unison 程式語言,並讓你瀏覽自己所撰寫與儲存的 Unison 程式碼的工具。
💡 請記住:Unison 程式碼並非以文字檔內容的形式儲存。因此,我們需要一個能讓我們修改並執行 Unison 程式的工具。
撰寫 Unison 程式碼,就跟打開你慣用的終端機,然後在你要撰寫 Unison 程式碼的目錄中執行ucm指令一樣簡單。接著,你可以用你慣用的文字編輯器建立或開啟一個副檔名為.u的檔案,例如scratch.u或hello.u。你的工作流程大部分會是在執行中的ucm命令列執行個體與你的.u檔之間來回切換。只要儲存檔案,UCM 就會自動監聽你的.u檔的變更。
Unison 沒有目錄結構,而是透過「命名空間」來組織程式碼庫。你會探索標準函式庫中名為base的命名空間,從中尋找有用的函式與資料型態,並在你撰寫 Unison 程式碼的過程中建立自己的命名空間。在 UCM 中,你可以用ls和view這兩個指令在程式碼庫中導覽,它們分別用來列出命名空間的內容與檢視原始碼。
雖然你可以透過 UCM 命令列瀏覽並檢視你的程式碼庫,但你可能也想看看自己成果的圖形化呈現。你可以在 UCM 命令列中執行ui指令來達成。它會開啟一個瀏覽器視窗,顯示你程式碼庫中的程式碼。本機程式碼庫 UI 也是探索標準函式庫(名為base)中函式的好方法,這對完成練習可能很有幫助。在這裡進一步了解本機程式碼庫 UI。
你可以用 Unison 語言導覽 來練習 Unison 的程式設計工作流。
使用project.create指令建立一個新專案,並替它取個名字(例如project.create hello-world)
讓 UCM 監看練習目錄,並在<myFileName>.u檔中進行修改
儲存<myFileName>.u檔
如果檔案通過型別檢查,就執行add或update這兩個 UCM 指令
<myFileName>.u檔中的程式碼,直到它能編譯為止在 UCM 命令列中執行load <myFileName>.test.u指令,把測試載入作用域並執行
如果你是在命令列上解 Exercism 的題目,你很可能會在以該練習命名的目錄中實作你的解法。舉例來說,如果練習是hello-world,你應該先cd到~/exercism/unison/hello-world,再從命令列開啟ucm,並在ucm中建立一個專案(例如project.create hello-world)。在hello.u檔中進行你的實作修改,當你對自己的實作感到滿意時,就在 Unison Codebase Manager 命令列(UCM)中輸入add或update指令,把你從檔案完成的工作加入程式碼庫。
每個練習的測試檔都以.test.u為副檔名。你會想在 UCM 中使用load指令,把測試載入作用域並執行。load指令以檔案路徑作為引數。以 hello world 練習與hello-world專案為例,情況大概會像這樣:
hello-world/main> load hello.test.u
你應該會看到 UCM 的訊息,說明哪些詞彙被載入作用域,更重要的是,也會顯示執行測試的結果:
⍟ These new definitions are ok to `add`:
hello.test : Test.Test
tests : [Result]
Now evaluating any watch expressions (lines starting with
`>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
🚫 FAILED
假設你的測試第一次沒有通過。切換回你的myExercise.u檔繼續編輯,儲存之後你就可以update:
I found and typechecked these definitions in ~/Exercism/unison/hello-world/hello.u. If you do an
`add` or `update`, here's how your codebase would change:
⍟ These names already exist. You can `update` them to your new definition:
hello : Text
hello-world/main> update
⍟ I've updated these names to your new definition:
hello : Text
接著我們可以重新載入測試,看看有沒有任何變化!
hello-world/main> load hello.test.u
Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
✅ Passed : Passed 1 tests.
如要查看可與你的程式碼庫互動的指令清單,請在 Unison Codebase Manager 命令列中執行help。UCM 指令的清單也在我們的網站上有說明。以下是幾個可能派得上用場的指令: