【问题标题】:Array equation explanation数组方程解释
【发布时间】:2017-12-08 15:13:19
【问题描述】:

如果有人能解释为什么这段代码的输出,我将不胜感激:

*a, b = [1, 2, 3, 4]
a[b-2] + b

7。有人可以逐行分解它,以便我了解这里发生了什么吗?这怎么变成7

【问题讨论】:

    标签: ruby


    【解决方案1】:

    通过在 a 上使用 splat 运算符,我们基本上让 a 获取所有其他 b 不需要的数字。所以 b 从数组中取出一个数字,而 a 取出剩下的所有数字。

    b = 4 
    
    a = [1,2,3]
    

    现在当我们这样做时:

    a[b-2] + b
    

    翻译成:

    a[4-2] + 4 
    
    a[2] + 4
    

    现在我们检查数组 a 中位置 2 的数字。

    3 + 4 = 7
    

    【讨论】:

      【解决方案2】:

      *a, b = [1, 2, 3, 4] 表示a = [1,2,3]b = 4,当您执行a[b-2] + b 时,它将是

                      +-----------------------+
      a[b-2]   + b    |        a[2]           |
      a[4-2]   + 4    |          |            |
      a[2]     + 4    |  a[1, 2, 3]           |
      3        + 4    |    0  1  2 -> index   |
      = 7             +-----------------------+
      

      【讨论】:

      • 谢谢你,维韦克。我现在明白了!
      【解决方案3】:
      *a, b = [1, 2, 3, 4]
      
      a
       => [1, 2, 3] 
      
      b
       => 4 
      
      a[b-2] // b-2 = 2 find value at index of 2 in a, like a[2] is 3
       => 3 
      
      a[b-2]+b
       => 7 
      

      【讨论】:

      • 谢谢你,Mayur!
      【解决方案4】:

      当你像这样分配数组时,

      *a, b = [1, 2, 3, 4]
      

      然后它会分配

      a = [1,2,3]
      

      b = 4

      现在当你尝试打印a[b-2] + b

      a[b - 2] = 3
      b = 4
      3 + 4 = 7
      

      为了进一步了解,请使用 rails 控制台并逐行运行。

      【讨论】:

      • 谢谢你,哈迪克。
      【解决方案5】:

      要逐行分解任何内容,可以使用 REPL:

      *a, b = [1, 2, 3, 4]
      #⇒ [1, 2, 3, 4]
      
      a
      #⇒ [1, 2, 3]
      
      b
      #⇒ 4
      

      使用 splat 运算符,我们将原始数组分解为新数组和单个值。现在一切都清楚了:a[b-2]a[2],又是 3(检查 a 数组。)而 b 仍然是 4

      3 + 4
      #⇒ 7
      

      【讨论】:

      • 那么 * 运算符在最后拆分数组并为其分配最后一个索引值?我的意思是,为什么 *a 采用前 3 个索引值而 b 采用最后一个,4?
      • 不,splat运算符将右边的数组分配给操作数,逗号是分解(拆分)原始数组的东西。
      • This answer 是消除 splat [和双 splat] 运算符的重要来源。
      • 啊!我知道了!非常感谢,@mudasobwa
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多