2016-12-30 55 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