先前有少為提到
在 Elixir 裡面使用 #
來寫單行註解
針對某個模組的文件使用,@moduleoc
與 """
開始,再一個 """
結束來標記如下:
defmodule Greet do
@moduledoc """
這個模組的文件
"""
end
一但這個模組有這個說明,在 iex 內使用 h
函式的時候可以查看該模組的文件
iex(7)> h Greet
Greet
這個模組的文件
Elixir 內建與很多套件都是使用這個方式來寫文件,寫在程式內的好處就是除了 iex 可以方便使用 h 函式來查看,Agent 也可以經由 MCP 來查詢。
@doc """
Hello world.
## Examples
iex> Greet.hello()
:world
"""
def hello do
:world
end
函數也是一樣,寫了之後可以經由 iex 查看文件,通常會加上範例
iex(8)> h Greet.hello
def hello()
Hello world.
## Examples
iex> Greet.hello()
:world
在寫函式的文件示範的時候,最怕的就是更新的時候沒有連文件一起更新
但是 Elixir 提供了 doctest 功能,會將依照規範寫的 Example 當成測試一起跑過
執行測試的時候 會看到最後的結果寫有跑過 doctest 與一班測試的數量
mix test
Running ExUnit with seed: 508207, max_cases: 20
..
Finished in 0.01 seconds (0.00s async, 0.01s sync)
1 doctest, 1 test, 0 failures
doctest 會偵測的語法為,模擬我們在 iex 中輸入指令的 iex>
只要有 iex>
,右邊的程式就會被執行
接下來的下一行就會是期待的結果
iex> Greet.hello()
:world
這個等同於
assert Greet.hello() === :world
也可以使用 ...>
寫需要跨行的程式
iex> ["Elixir", "Erlang"]
...> |> List.first()
"Elixir"