當使用quote do:
記錄引述不會轉換爲包含記錄字段的元組:Elixir報價記錄(把它變成一個元組)並保存數據?
iex(1)> quote do: is_bitstring("blah")
{:is_bitstring, [context: Elixir, import: Kernel], ["blah"]}
iex(2)> quote do: Computer.new("Test")
{{:., [], [{:__aliases__, [alias: false], [:Computer]}, :new]}, [], [[name: "Test"]]}
iex(3)> quote do: Computer.new("Test")
{{:., [], [{:__aliases__, [alias: false], [:Computer]}, :new]}, [], [[name: "Test"]]}
iex(4)> c = Computer.new("Test")
Computer[name: "Test", type: nil, processor: nil, hard_drives: []]
iex(5)> c
Computer[name: "Test", type: nil, processor: nil, hard_drives: []]
iex(6)> quote do: c
{:c, [], Elixir}
此外,當我嘗試在我的代碼,這樣做:
defmacro computer([do: code]) do
# macro login here
# build computer record based on macro logic
computer = Computer.new(params)
quote do: unquote computer
end
我得到一個錯誤:
** (CompileError) elixir/test/lib/computer_dsl_test.exs: tuples in quoted expressions must have 2 or 3 items, invalid quoted expression: Computer[name: "", type: nil, processor: nil, hard_drives: []]
我認爲記錄只是具有某種包裝函數的元組。 Elixir入門指南指出"A record is simply a tuple where the first element is the record module name."
有什麼我失蹤?是否有一個函數可以在記錄上調用以獲取元組表示形式?我知道raw: true
選項,但我不知道如何在現有記錄上使用它。
任何見解?
您的代碼也不適用於記錄。 「計算機」宏的用途是什麼? –
@RamonSnir我從宏中刪除了一些代碼,以使它更清楚我所問的內容。我在我的問題中添加了對代碼的評論,以使其更清晰。 – Stratus3D