Ответ 1
Строки не действуют как перечислимый объект с 1,9, так как считалось слишком запутанным, чтобы решить, что это был бы список:
- Список символов/кодовых точек?
- Список байтов?
- Список строк?
Я прокладываю себе путь через Project Euler и столкнулся с немного неожиданным упущением: нет String#shift
, unshift
, push
или pop
. Я предположил, что String считается "последовательным" объектом, таким как Array, поскольку они делятся способностью индексироваться и проходить через и что это будет включать возможность легко изменять начало и конец объекта.
Я знаю, что есть способы создать одни и те же эффекты, но есть ли конкретная причина, по которой у String не есть эти методы?
Строки не действуют как перечислимый объект с 1,9, так как считалось слишком запутанным, чтобы решить, что это был бы список:
Не будучи вкладчиком Ruby, я не могу говорить с их проектами, но из опыта я не думаю, что строки рассматриваются как "последовательные" объекты; они изменяются способами, которые предполагают последовательное поведение, но большую часть времени их обрабатывают атомарно.
Пример: в Ruby 1.9, String
больше не смешивается в Enumerable
.
>> mystring = "abcdefgh"
=> "abcdefgh"
>> myarray = mystring.split("")
=> ["a", "b", "c", "d", "e", "f", "g", "h"]
>> myarray.pop
=> "h"
>> mystring = myarray.join
=> "abcdefg"
это должно сделать это, вам нужно было бы преобразовать его в массив, а затем вернуться, хотя
UPDATE:
используйте String#chop!
и Stirng#<<
>> s = "abc"
=> "abc"
>> s.chop!
=> "ab"
>> s
=> "ab"
>> s<<"def"
=> "abdef"
>> s
=> "abdef"
>>
Хорошо хотя бы в 1.9.2, вы можете иметь дело с строкой, подобной массиву.
ruby-1.9.2-p290 :001 > "awesome"[3..-1] => "some"
Итак, если вы хотите сделать вид сдвига влево, просто используйте [1..- 1]
ruby-1.9.2-p290 :003 > "fooh!"[1..-1] => "ooh!"