函数中的Elixir关键字列表';s论点

函数中的Elixir关键字列表';s论点,elixir,Elixir,给定一个函数: def foo(a, opts \\ []), do: opts 我可以这样调用此函数: foo 1, b: 2 我知道b:2与[b:2]相同, 但我不能在iex中这样做,例如: iex(1) a: 2, b: 2 ** (SyntaxError) iex:1: syntax error before: a 所以我想知道,为什么函数参数中的关键字列表是 不同的?TL;DR这是语法分析器的要求,函数调用中有一个语法糖,可以省略括号关键字s本身是相同的 关键字列表本身是相同的

给定一个函数:

def foo(a, opts \\ []), do: opts
我可以这样调用此函数:

foo 1, b: 2
我知道
b:2
[b:2]
相同, 但我不能在iex中这样做,例如:

iex(1) a: 2, b: 2
** (SyntaxError) iex:1: syntax error before: a
所以我想知道,为什么函数参数中的关键字列表是
不同的?

TL;DR这是语法分析器的要求,函数调用中有一个语法糖,可以省略括号<代码>关键字s本身是相同的


关键字列表本身是相同的。但长生不老药语法分析器必须理解您的意图。对于函数调用,它添加了一个语法糖,允许您省略关键字参数周围的括号,前提是不确定其含义:

foo(a: 42, b: :hello)
将致力于:

def foo(opts \\ []), do: opts
但下面的代码片段不起作用:

a = a: 42, b: :hello

在行首、模式匹配和/或赋值中,语法分析器要求括号理解
关键字的终止位置。

TL;DR这是语法分析器的要求,函数调用中有一个语法糖,可以省略括号<代码>关键字
s本身是相同的


关键字列表本身是相同的。但长生不老药语法分析器必须理解您的意图。对于函数调用,它添加了一个语法糖,允许您省略关键字参数周围的括号,前提是不确定其含义:

foo(a: 42, b: :hello)
将致力于:

def foo(opts \\ []), do: opts
但下面的代码片段不起作用:

a = a: 42, b: :hello
在行首,在模式匹配和/或赋值中,语法分析器需要括号来理解
关键字
的终止位置