Elixir案例在一条线上

时间:2017-02-14 15:24:57

标签: elixir

我想在一行中提供以下案例:

case s do
  :a -> :b
  :b -> :a
end

case定义为case(condition, clauses)。以下

quote do
  case s do
    :a -> :b
    :b -> :a
  end
end

给出:

{:case, [],
 [{:s, [], Elixir}, [do: [{:->, [], [[:a], :b]}, {:->, [], [[:b], :a]}]]]}

从此处应该可以返回case(s, ???)

2 个答案:

答案 0 :(得分:13)

有两种方法可以做到这一点。上面的答案之一是内联do end调用获取:

case s do :a -> :b; :b -> :a end

另一个是使用块的, do:关键字版本。我们需要对这两个表达式进行分组 - 否则编译器不会知道这两个子句都属于这种情况:

case s, do: (:a -> :b; :b -> :a)

如果没有parens,表达式将被解析为:

(case s, do: :a -> :b); :b -> :a

并且它自己的:b -> :a不是elixir中的有效表达式。

答案 1 :(得分:5)

显然,您可以使用;来实现您想要的目标:

 case s do :a -> :b; :b -> :a end