我想在一行上有以下案例:
case s do
:a -> :b
:b -> :a
end
Run Code Online (Sandbox Code Playgroud)
宏case被定义为case(condition, clauses).下列
quote do
case s do
:a -> :b
:b -> :a
end
end
Run Code Online (Sandbox Code Playgroud)
得到:
{:case, [],
[{:s, [], Elixir}, [do: [{:->, [], [[:a], :b]}, {:->, [], [[:b], :a]}]]]}
Run Code Online (Sandbox Code Playgroud)
从这里应该可以回到 case(s, ???)
mic*_*ala 16
有两种可能的方法可以做到这一点.上面的答案之一是内联do end调用获取:
case s do :a -> :b; :b -> :a end
Run Code Online (Sandbox Code Playgroud)
另一个是使用, do:块的关键字版本.我们需要对这两个表达式进行分组 - 否则编译器不会知道这两个子句都属于这种情况:
case s, do: (:a -> :b; :b -> :a)
Run Code Online (Sandbox Code Playgroud)
如果没有parens,表达式将被解析为:
(case s, do: :a -> :b); :b -> :a
Run Code Online (Sandbox Code Playgroud)
而且:b -> :a它本身并不是灵药中的有效表达.
| 归档时间: |
|
| 查看次数: |
1731 次 |
| 最近记录: |