> 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
Ruby 1.8.7 имеет , имеет Array#reject!, хотя:
Array#reject!
>> a = [1, 2, nil] => [1, 2, nil] >> a.reject! &:nil? => [1, 2]
Документы, на которые вы ссылаетесь, предназначены для Ruby 1.9.2. Ruby 1.8.7 Массивы не имеют select!.
select!
РЕДАКТИРОВАТЬ: В будущем вы можете просмотреть документацию для различных версий Ruby, которыетам.
Array#select! был представлен в Ruby 1.9.2.
Array#select!
Чтобы получить его в более старых версиях Ruby и перестать беспокоиться о том, какие версии Ruby имеют какие методы, вы можете require "backports/1.9.2/array/select".
require "backports/1.9.2/array/select"
Вы также можете использовать Array#reject! или комбинировать #replace и #select вместо.
#replace
#select
Код работает для меня, но я использую Ruby 1.9.2 (это та же версия документа, на которую вы ссылались).
Вот документация 1.8.7 ,Доступно только уведомление select, а не select!
select
Проблема в том, что вы используете Ruby 1.8.7. Документы, на которые вы ссылаетесь, относятся к Ruby 1.9.2. 1.8.7 не включает Array#select!, как вы можете видеть здесь: