метод цепочек рубинов - PullRequest
       1

метод цепочек рубинов

0 голосов
/ 31 октября 2010
   var.split('/').delete_at(0)

после осмотра возвращается

"" 

независимо от того, какая строка, однако ....

   var.split('/')
   var.delete_at(0)

не доставляет мне проблем.это, вероятно, глупый вопрос, но есть ли какие-то ограничения / ограничения в отношении цепочки методов, подобные этой?

спасибо, брендон

Ответы [ 3 ]

8 голосов
/ 31 октября 2010

Метод delete_at удаляет элемент, но возвращает удаленный элемент, а не новый массив.

Если вы хотите всегда возвращать объект, вы можете использовать метод tap (доступен начиная с Ruby 1.8.7).

a = [1, 2, 3, 4, 5, 6, 7]
a.delete_at(0) # => 1
a # => [2, 3, 4, 5, 6, 7]

a = [1, 2, 3, 4, 5, 6, 7]
a.tap { |a| a.delete_at(0) } # => returns [2, 3, 4, 5, 6, 7]
a # => [2, 3, 4, 5, 6, 7]
2 голосов
/ 31 октября 2010

буквально первое, что я попытался сделать, было:

var.split ( '/'). Delete_at (0)

которые при осмотре вернули

""

независимо от того, какая строка

Вы уверены? Попробуйте строку 'a/b':

irb(main):001:0> var = 'a/b'
=> "a/b"
irb(main):003:0> var.split('/').delete_at(0)
=> "a"

Обратите внимание, что возвращаемым значением является удаленный элемент, а не массив. Массив, который вы создали, выполняя разделение, нигде не хранился, и теперь у вас нет на него ссылок Вы, вероятно, хотите сделать это вместо:

a = var.split('/')
a.delete_at(0)
0 голосов
/ 31 октября 2010

Если вам всегда нужно удалить первый элемент, вы можете использовать другие методы, которые возвращают сам объект, например slice!, например:

s = 'foo/bar/baz'
#=> "foo/bar/baz"
s.split('/').slice!(1..-1)
#=> ["bar", "baz"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...