gpt4 book ai didi

elixir - 在 Elixir 中,为什么我不能在创建 map 时使用不同的符号?

转载 作者:行者123 更新时间:2023-12-04 15:32:50 26 4
gpt4 key购买 nike

定义 map 有两种不同的语法:

map = %{:a => 1, :b => 2}
#=> %{a: 1, b: 2}
map = %{a: 1, b: 2}
#=> %{a: 1, b: '2}
在定义 map 时按如下方式使用两者:
map = %{:a => 1, b: 2}
#=> %{a: 1, b: 2}
但是以其他顺序使用会引发错误:
map = %{a: 1, :b => 2}
#=> ** (SyntaxError) iex:37: syntax error before: b
为什么?
编辑
操作系统: Ubuntu 15.4
药剂:1.1.1

最佳答案

根据 my issue on Github (我实际上不应该打开),这不是错误。

第一个答案(我没有真正得到):

It's not a bug, it's the same syntax sugar that is used for keywords on the last argument of a function.

foo(bar, baz: 0, boz: 1) #=> foo(bar, [baz: 0, boz: 1])

The map syntax is represented as function call in the AST:

iex(1)> quote do: foo(bar, baz: 0, boz: 1)
{:foo, [], [{:bar, [], Elixir}, [baz: 0, boz: 1]]}
iex(2)> quote do: %{baz: 0, boz: 1}
{:%{}, [], [baz: 0, boz: 1]}

That's why the map keyword syntax only works for the last (or only) argument.



第二个答案,从某种意义上来说听起来不错,我想我明白了:

Simple answer: b: 2 is syntax sugar for [b: 2], but the sugar only works when it is at the end of a function call or "construct" such as %{}.

关于elixir - 在 Elixir 中,为什么我不能在创建 map 时使用不同的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com