【问题标题】:Elixir keyword list in function's argument函数参数中的 Elixir 关键字列表
【发布时间】:2016-09-22 18:31:50
【问题描述】:

给定一个函数:

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

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

【问题讨论】:

    标签: elixir


    【解决方案1】:

    TL;DR 这是语法解析器的要求,函数调用中有语法糖,可以省略括号。 Keywords 本身是一样的。


    关键字列表本身是相同的。但是 Elixir 语法解析器必须理解你的意图来完成它的工作。对于函数调用,它添加了一个语法糖,允许您省略关键字参数周围的括号,当且仅当其含义没有不确定性时:

    foo(a: 42, b: :hello)
    

    适用于:

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

    但下面的 sn-p 不起作用:

    a = a: 42, b: :hello
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 2011-01-16
      • 2018-01-23
      相关资源
      最近更新 更多