【问题标题】:Behavior of underscore `_` in ElixirElixir 中下划线“_”的行为
【发布时间】:2016-08-09 22:44:33
【问题描述】:

我正在探索 Elixir 并遇到了关于下划线的一些奇怪的东西。我们使用它来匹配任何变量并将其丢弃,因为 Elixir 认为它永久未绑定:

iex(38)> _
** (CompileError) iex:38: unbound variable _

但是当我给下划线赋值时,该值会以与普通变量绑定相同的方式回显:

iex(38)> x = 10
10
iex(39)> _ = 10
10

shell 在第二种情况下回显10是什么意思?

【问题讨论】:

    标签: elixir


    【解决方案1】:

    = 运算符在进行模式匹配后返回 RHS 的值。在这种情况下,10 将被忽略,因为它已分配给 _,但整个表达式的返回值仍然是 10

    【讨论】:

    • 谢谢!这个答案更相关,因为它指定返回的值是右侧的。
    【解决方案2】:

    Elixir 中的每个表达式都会返回一个值。模式匹配时,会返回右边的值。

    _ = 10  # return 10 as RHS value
    

    考虑到这一点,您可以将匹配链接在一起。

    iex(1)> {date, time} = local_time = :calendar.local_time
    {{2016, 8, 9}, {7, 43, 11}}
    
    iex(2)> date
    {2016, 8, 9}
    
    iex(3)> time
    {7, 43, 11}
    
    iex(4)> local_time
    {{2016, 8, 9}, {7, 43, 11}}
    

    【讨论】:

      【解决方案3】:

      10 是表达式_ = 10 的结果。

      Elixir 中的一切都是一个表达式,所以一切都返回一个值。

      【讨论】:

        【解决方案4】:

        通常在 Elixir 中,当您在模式匹配中使用 _ 时,您并不关心这个值。

        这里返回的是表达式的值,即10

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-23
          • 2013-08-22
          • 1970-01-01
          • 2021-11-28
          • 1970-01-01
          相关资源
          最近更新 更多