这按预期工作,返回true
:
['a', 'b', 'c', 'd', 'e'].include? 'e'
这也符合我的预期,并返回true
:
x = %w('a b c d e')
x.include? 'e' # => true
但这无法正常工作,返回false
:
%w('a b c d e').include? 'e'
最奇怪的部分是第一个或最后一个值返回false
,而内部值返回true
。我用3到5个字符的字符串进行了尝试,结果相同。
为什么?
编辑:iGian要求我检查x.include? 'e'
是否真的评估为true
。没有。现在,当我尝试这种情况时,我没有将字符加引号!我认为我需要增加屏幕字体大小或购买新眼镜。因此,%w ('a b c')
中的值为'a
,b
和c'
。这就很好地解释了为什么我得到发现的行为。
答案 0 :(得分:7)
如果将其放入irb
中,然后看看Ruby的想法,答案就很明显了:
%w('a b c d e')
# => ["'a", "b", "c", "d", "e'"]
它不包含e
,而是包含e'
,因为您使用的%w
错误。
使用%w
时删除引号。它以空格分隔,而不是引号。任何非空格字符都被视为字符串的一部分,并“粘在”它们的相邻字母上。