Добавляют ли гибкие кавычки дополнительный символ в строку? - PullRequest
2 голосов
/ 12 ноября 2011

Я изучал ruby ​​через ruby ​​koans, когда столкнулся со следующими двумя функциями:

def test_flexible_quotes_can_handle_multiple_lines
   *long_string = %{
   It was the best of times,
   It was the worst of times.
   }*
   assert_equal *54*, long_string.size
end

def test_here_documents_can_also_handle_multiple_lines
   *long_string = <<EOS
   It was the best of times,
   It was the worst of times.
   EOS*
   assert_equal *53*, long_string.size
end

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

Ответы [ 2 ]

5 голосов
/ 12 ноября 2011

Я бы сказал, что это символ новой строки после %{.

>> test = %{
">> foo
">> }
=> "\nfoo\n"
>> test.size
=> 5
>> test = %{foo
">> }
=> "foo\n"
>> test.size
=> 4
>> test = <<EOS
">> foo
">> EOS
=> "foo\n"
>> test.size
=> 4
4 голосов
/ 01 марта 2014

Я только что прошел через эту проблему.Вы можете попробовать запустить irb в консоли и протестировать некоторые из них.
Пример:

$ irb
2.0.0-p353 :001 > long_string = %{
2.0.0-p353 :002"> It was the best of times,
2.0.0-p353 :003"> It was the worst of times.
2.0.0-p353 :004"> }
 => "\nIt was the best of times,\nIt was the worst of times.\n" 
2.0.0-p353 :005 > long_string.length
 => 54 
2.0.0-p353 :006 > long_string[0,1]
 => "\n" 

Это перезапишет предыдущее назначение long_string, но если это поможет создать новый сеанс только для его визуализации:

2.0.0-p353 :007 > exit
$ irb

2.0.0-p353 :001 > long_string = <<EOS
2.0.0-p353 :002"> It was the best of times,
2.0.0-p353 :003"> It was the worst of times.
2.0.0-p353 :004"> EOS
 => "It was the best of times,\nIt was the worst of times.\n" 
2.0.0-p353 :005 > long_string.length
 => 53 
2.0.0-p353 :006 > long_string[0,1]
=> "I" 

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

...