2016-12-30 51 views
2

学习药剂基础知识我想尝试这样做,它做什么,我希望,在地图灵药匹配类型映射的关键

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 

发生了什么事?

回答

3

看起来像Elixir中的一个bug。 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