当我处理数组时,我在 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)
应根据虚假声明提出例外情况
\n\n应提出例外情况 [...]
\n
[1,8[1,6]]在数组文字的上下文中可能看起来像语法错误,但它实际上是一个完全有效的 Ruby 表达式。它创建一个包含两个元素的数组:1其结果8[1,6]是4。
8[1,6]提取整数的一部分8。8它通过将其视为位序列(二进制数 00001000\xe2\x82\x82)来实现此目的。从这些位中,提取 6 位,从位 1 开始:(位 0 是最右边的位)
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\nRun Code Online (Sandbox Code Playgroud)\nInteger#[]有关详细信息,请参阅文档。
"hello ruby"[1,6]这与通过将字符串视为字符序列来提取字符串的一部分非常相似:(字符 0 是最左边的字符)
"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"\nRun Code Online (Sandbox Code Playgroud)\n