函数参数中的Elixir关键字列表

时间:2016-09-22 10:25:37

标签: elixir

给出一个函数:

foo 1, b: 2

我可以这样调用这个函数:

b: 2

我知道[b: 2]iex(1) a: 2, b: 2 ** (SyntaxError) iex:1: syntax error before: a 相同, 但我不能在iex中这样做,例如:

$attachments = [
            'text' => "Active codebases: (total = $total)",
            'attachments' => [
                [
                    'color' => '#3333ff',
                    'fields' => [

                    ]
                ]
            ]
        ];

所以我想知道,为什么函数参数中的关键字列表是 不同?

1 个答案:

答案 0 :(得分:3)

TL; DR 这是一个语法分析器要求,函数调用中有一个语法糖,让我们省略括号。 Keyword本身也是一样。

关键字列表本身是相同的。但是Elixir语法分析器必须理解你做这个工作的意图。对于函数调用,它添加了一个语法糖,允许你省略关键字参数的括号,如果且只是没有不明确的含义:

foo(a: 42, b: :hello)

适用于:

def foo(opts \\ []), do: opts

但下面的代码段不起作用:

a = a: 42, b: :hello

在行的开头,在模式匹配和/或赋值中,语法分析器需要括号来理解Keyword终止的位置。