У ruby ​​есть метод выбора массива! или нет? - PullRequest
9 голосов
/ 11 марта 2011
> a = %w(a b c)
 => ["a", "b", "c"] 
> a.select!{|e| !e.nil?}
NoMethodError: undefined method `select!' for ["a", "b", "c"]:Array
    from (irb):2

ruby 1.8.7 (2010-04-19 patchlevel 253) [i686-darwin10.5.0], MBARI 0x6770, Ruby Enterprise Edition 2010.02

Док говорит, что есть метод select! в массиве.

http://www.ruby -doc.org / ядро ​​/ классов / Array.html # M000252

Ответы [ 5 ]

10 голосов
/ 11 марта 2011

Ruby 1.8.7 имеет , имеет Array#reject!, хотя:

>> a = [1, 2, nil]
=> [1, 2, nil]
>> a.reject! &:nil?
=> [1, 2]
7 голосов
/ 11 марта 2011

Документы, на которые вы ссылаетесь, предназначены для Ruby 1.9.2. Ruby 1.8.7 Массивы не имеют select!.

РЕДАКТИРОВАТЬ: В будущем вы можете просмотреть документацию для различных версий Ruby, которыетам.

3 голосов
/ 11 марта 2011

Array#select! был представлен в Ruby 1.9.2.

Чтобы получить его в более старых версиях Ruby и перестать беспокоиться о том, какие версии Ruby имеют какие методы, вы можете require "backports/1.9.2/array/select".

Вы также можете использовать Array#reject! или комбинировать #replace и #select вместо.

1 голос
/ 11 марта 2011

Код работает для меня, но я использую Ruby 1.9.2 (это та же версия документа, на которую вы ссылались).

Вот документация 1.8.7 ,Доступно только уведомление select, а не select!

0 голосов
/ 11 марта 2011

Проблема в том, что вы используете Ruby 1.8.7. Документы, на которые вы ссылаетесь, относятся к Ruby 1.9.2. 1.8.7 не включает Array#select!, как вы можете видеть здесь:

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