Почему в Ruby Array ("foo \ nbar") == ["foo \ n", "bar"]? - PullRequest
4 голосов
/ 12 июня 2010

В Ruby 1.8.7 Array("hello\nhello") дает ["hello\n", "hello"].Это делает две вещи, которые я не ожидаю:

  1. Это разбивает строку на новые строки.Я ожидал бы, что он просто даст мне массив со строкой, которую я передаю как отдельный элемент, без изменения данных, которые я передаю.

  2. Даже если вы согласитесь с разумным разделитьстрока при передаче его в массив, почему он сохраняет символ новой строки, когда "foo\nbar".split нет?

Дополнительно:

>> Array.[] "foo\nbar"
=> ["foo\nbar"]
>> Array.[] *"foo\nbar"
=> ["foo\n", "bar"]

Ответы [ 3 ]

1 голос
/ 12 июня 2010

Разбивает строку на новые строки. Я ожидал бы, что он просто даст мне массив со строкой, которую я передаю как отдельный элемент, без изменения данных, которые я передаю.

Это соглашение так же хорошо, как и любое другое. Например, конструктор list в Python делает что-то совершенно другое:

>>> list("foo")
['f', 'o', 'o']

Пока это непротиворечиво, я не вижу проблемы.

Даже если вы согласны с тем, что разумно разбивать строку при передаче ее в массив, почему он сохраняет символ перевода строки, а "foo\nbar".split - нет?

Моя дикая догадка здесь (поддерживается быстрым поиском в Google и TryRuby ) заключается в том, что метод .split для строк делает его «обратной» операцией метода .join для массивов.

>> "foospambar".split("spam").join("spam")
=> "foospambar"

Кстати, я не могу повторить ваше поведение на TryRuby :

>> x = Array("foo\nbar")                                                         
=> ["foo\nbar"]   
>> Array.[] *"foo\nbar"                                                 
=> ["foo\nbar"]   
0 голосов
/ 12 июня 2010

Вы можете попробовать:

"foo\nbar".split(/w/)
"foo\nbar".split(/^/)
"foo\nbar".split(/$/)

и другие регулярные выражения.

0 голосов
/ 12 июня 2010

Если вы замените двойные кавычки одинарными, то все будет работать так, как ожидалось:

>> Array.[] "foo\nbar"
=> ["foo\nbar"]
>> Array.[] 'foo\nbar'
=> ["foo\\nbar"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...