使用elixir匹配地图中类型地图的键

时间:2016-12-30 22:37:40

标签: elixir

学习Elixir基础知识我尝试过这个,这符合我的期望,

gg=%{:a => 1, 2 => :b, %{ :a => 5 } => 8}

gg[:a]   # give 2
%{ :a => k } = gg # gives k = 2

gg[%{ :a => 5 }] # gives 8

但是具体问题是什么:

%{ %{ :a => 5 } => k } = gg

我得到的错误是

** (CompileError) hello.exs:46: only association operators '=>' are 
allowed in map construction
    (stdlib) lists.erl:1338: :lists.foreach/2
    (elixir) lib/code.ex:363: Code.require_file/2

发生了什么?

1 个答案:

答案 0 :(得分:3)

看起来像Elixir中的一个错误。同样在Erlang中工作正常。

1> M = #{ #{1 => 2} => 10 }.
#{#{1 => 2} => 10}
2> #{ #{1 => 2} := X } = M.
#{#{1 => 2} => 10}
3> X.
10

作为一种解决方法,您可以将变量用于密钥:

iex(1)> key = %{a: 5}
%{a: 5}
iex(2)> %{ ^key => v } = gg
%{2 => :b, :a => 1, %{a: 5} => 8}
iex(3)> v
8

我在这里创建了错误报告: https://github.com/elixir-lang/elixir/issues/5602