使用Ruby的%w快捷方式的奇怪行为

Bob*_*des 0 ruby

这符合我的预期,返回true:

['a', 'b', 'c', 'd', 'e'].include? 'e'
Run Code Online (Sandbox Code Playgroud)

这也像我期望的那样工作,也回归true:

x = %w('a b c d e')
x.include? 'e' # => true
Run Code Online (Sandbox Code Playgroud)

但这并不像我预期的那样有效,返回false:

%w('a b c d e').include? 'e'
Run Code Online (Sandbox Code Playgroud)

最奇怪的部分是第一个或最后一个值返回false,而内部值返回true.我用三到五个字符的字符串尝试了这个,结果相同.

为什么?

编辑:iGian让我检查是否x.include? 'e'真的评估过true.它没有.我现在看到,当我尝试这种情况时,我没有把字符放在引号中!我想我需要增加屏幕字体大小或获得新眼镜.所以,中的值%w ('a b c')'a,bc'.这完全解释了为什么我得到了我发现的行为.

tad*_*man 7

如果你把它放进去irb看看Ruby的想法,答案就很明显了:

%w('a b c d e')
# => ["'a", "b", "c", "d", "e'"]
Run Code Online (Sandbox Code Playgroud)

它不包含e,而是e'因为您使用%w不正确.

使用时删除引号%w.它分裂在空格上,而不是引号.任何非空格字符都被认为是字符串的一部分,并被"卡住"到它们的相邻字母上.