Странное поведение с ярлыком% w в Ruby - PullRequest
0 голосов
/ 18 января 2019

Это работает, как я ожидаю, возвращая 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. Я пробовал это с строками от трех до пяти символов, с тем же результатом.

Почему?

Редактировать: iGian попросил меня проверить, действительно ли x.include? 'e' оценивается как true. Это не так. Теперь я вижу, когда я пытался это сделать, я не помещал символы в кавычки! Я думаю, что мне нужно увеличить размер шрифта экрана или получить новые очки. Итак, значения в %w ('a b c') равны 'a, b и c'. Это прекрасно объясняет, почему я получаю поведение, которое нахожу.

1 Ответ

0 голосов
/ 18 января 2019

Ответ довольно очевиден, если вы уроните это в irb и посмотрите, что думает Руби:

%w('a b c d e')
# => ["'a", "b", "c", "d", "e'"]

Он не содержит e, но вместо e', потому что вы используете %w неправильно.

Удалить кавычки при использовании %w. Он разделяется на пробелы, а не на кавычки. Любые непробельные символы считаются частью строки и «застревают» к соседним буквам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...