学习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
发生了什么?
答案 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