Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir quote块的返回值是多少?_Elixir - Fatal编程技术网

Elixir quote块的返回值是多少?

Elixir quote块的返回值是多少?,elixir,Elixir,我尝试学习宏,并有以下代码片段: defmodule ControlFlow do defmacro unless(expression, do: block) do quote do if !unquote(expression), do: unquote(block) end end end 它的工作原理与预期一致: iex(16)> ControlFlow.unless 2 == 5, do: "block entered" "block e

我尝试学习宏,并有以下代码片段:

defmodule ControlFlow do

  defmacro unless(expression, do: block) do
    quote do
      if !unquote(expression), do: unquote(block)
    end
  end

end
它的工作原理与预期一致:

iex(16)> ControlFlow.unless 2 == 5, do: "block entered"
"block entered"
现在我的问题是,quote块的返回值是多少? 这个


您可以在宏中使用
Macro.to_string/1
IO.put/1
来检查返回的内容:

defmodule ControlFlow do
  defmacro unless(expression, do: block) do
    ast = quote do
      if !unquote(expression), do: unquote(block)
    end
    ast |> Macro.to_string |> IO.puts
    ast
  end
end
演示:

因此,您的代码变成:

if(!(2 == 5)) do
  "block entered"
end

您可以在宏中使用
Macro.to_string/1
IO.put/1
来检查返回的内容:

defmodule ControlFlow do
  defmacro unless(expression, do: block) do
    ast = quote do
      if !unquote(expression), do: unquote(block)
    end
    ast |> Macro.to_string |> IO.puts
    ast
  end
end
演示:

因此,您的代码变成:

if(!(2 == 5)) do
  "block entered"
end
否决票——基本上是零研究工作。当然,与您在covered Macro.to_string/1以及.Downvote中找到该示例的来源相同——基本上没有任何研究工作。当然,与您在covered Macro.to_string/1中找到该示例的来源相同。