这符合我的预期,返回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,b和c'.这完全解释了为什么我得到了我发现的行为.
如果你把它放进去irb看看Ruby的想法,答案就很明显了:
%w('a b c d e')
# => ["'a", "b", "c", "d", "e'"]
Run Code Online (Sandbox Code Playgroud)
它不包含e,而是e'因为您使用%w不正确.
使用时删除引号%w.它分裂在空格上,而不是引号.任何非空格字符都被认为是字符串的一部分,并被"卡住"到它们的相邻字母上.