Ruby 3.1 中数组索引的奇怪行为

den*_*den 1 ruby ruby-3.1

我不知道为什么我的红宝石中会发生这种情况,但是您看到同样的行为吗?

3.1.2 :001 > ["url", "label:from", "label:type", "label:batch", "note"].index('url')
 => nil
Run Code Online (Sandbox Code Playgroud)
3.1.2 :002 > ["url", "label:from", "label:type", "label:batch", "note"].index('note')
 => 4
Run Code Online (Sandbox Code Playgroud)
3.1.2 :003 > ["Url", "label:from", "label:type", "label:batch", "note"].index('Url')
 => 0
Run Code Online (Sandbox Code Playgroud)

小写时找不到“url”。这是保留字吗?

编辑:似乎无法找到第一次出现的“url”字符串:

["note", "url", "label:from", "label:type", "label:batch", "note", "url"].index 'url'
 => 6       
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 5

数组中的第一个条目不是您想象的那样。查看原始字节,您会看到:

["url", "label:from", "label:type", "label:batch", "note"].first.bytes.map { |x| x.to_s(16) }
# ["ef", "bb", "bf", "75", "72", "6c"]
Run Code Online (Sandbox Code Playgroud)

0x75 0x72 0x6c就是"url"您所看到的,这0xef 0xbb 0xbf是一个字节顺序标记(BOM)。字节顺序在 UTF-8 中没有意义,因此不应使用 BOM,它们有效但不常见,不推荐使用。如果字符串来自文件,您可以让 Ruby在读取文件时去除 BOM 。