私はちょうどElixirの基礎を取り上げて、メタプログラミングを楽しみました。私はunless(expression, do: block)
部分の意味をなすように見えることはできません関数の引数(マクロ)で `do`構造体を使う
defmodule ControlFlow do
defmacro unless(expression, do: block) do
quote do
if !unquote(expression), do: unquote(block)
end
end
end
:クリス・マッコードの著書では、私たち自身のunless
構造を定義する次の例があります。 do:
構成の唯一の使用は、関数の本体を短くして1行に圧縮することです。ただし、ここでは、unless
の後に実行されるブロックは、すでに関数の引数の一部です。 do: block
の部分はどのようにここに収まりますか?たぶん私は本当にシンプルなものを見落としていますが、私はそれを指摘して喜んでします。
素晴らしい!そして、 '{:do、block} 'はタプルであると思いますか?そうであれば、 'arg = {:do、block}'と仮定して、 'args [:do]'としてアクセスされているタプルを思い出しません。あるいは、私は基本的なデータ型を再訪する必要があります! :Pもう少し説明してください。 – dotslash
'args [:do]'は 'args'が最初の項がアトムであるタプルの_list_であるため動作します。これはElixirのキーワードリストとも呼ばれます:http://elixir-lang.org/docs/stable/elixir/ Keyword.html。 – Dogbert
である。今や意味をなさない! :-) – dotslash