Ruby 中如何解释嵌套数组的声明?

Dee*_*ini 1 ruby

当我处理数组时,我在 Ruby 中的嵌套数组声明中错过了一个逗号,但语言以其他方式解释了它。如果有人熟悉这种行为,请考虑一下。

arr = [1,2[1,8]]
[1, 1] 
arr = [1,5[6,4]]
[1, 0] 
arr = [1,3[1,6]]
[1, 1] 
arr = [1,6[1,6]]
[1, 3] 
arr = [1,7[1,6]]
[1, 3] 
arr = [1,0[1,6]]
[1, 0] 
arr = [1,8[1,6]]
[1, 4]
Run Code Online (Sandbox Code Playgroud)

应根据虚假声明提出例外情况

Ste*_*fan 5

\n

应提出例外情况 [...]

\n
\n

[1,8[1,6]]在数组文字的上下文中可能看起来像语法错误,但它实际上是一个完全有效的 Ruby 表达式。它创建一个包含两个元素的数组:1其结果8[1,6]4

\n

8[1,6]提取整数的一部分88它通过将其视为位序列(二进制数 00001000\xe2\x82\x82)来实现此目的。从这些位中,提取 6 位,从位 1 开始:(位 0 是最右边的位)

\n
0b00001000[1,6]  #=> 8\n   \xe2\x86\x93\xe2\x86\x93\xe2\x86\x93\xe2\x86\x93\xe2\x86\x93\xe2\x86\x93\n 0b000100        #=> 4\n
Run Code Online (Sandbox Code Playgroud)\n

Integer#[]有关详细信息,请参阅文档。

\n

"hello ruby"[1,6]这与通过将字符串视为字符序列来提取字符串的一部分非常相似:(字符 0 是最左边的字符)

\n
"hello ruby"[1,6]\n  \xe2\x86\x93\xe2\x86\x93\xe2\x86\x93\xe2\x86\x93\xe2\x86\x93\xe2\x86\x93\n "ello r"\n
Run Code Online (Sandbox Code Playgroud)\n