открытие массива в консоли ruby on rails v. irb

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

Я хочу сделать свой код немного более читабельным, вызвав #rando для любого массива и извлекая случайный элемент (rando, потому что метод rand() уже существует, и я не хочу, чтобы была какая-либо путаница).

Итак, я открыл класс и написал метод:

 class Array
    def rando
       self[ rand(length) ]
    end
end
  

Это кажется слишком простым.

Когда я открываю irb и набираю, arr = %w(hi bye) а затем arr.rando я получаю в ответ либо привет, либо пока. Это ожидаемо. Однако в моей консоли rails, когда я делаю то же самое, я получаю ArgumentError: wrong number of arguments (1 for 0)

Я отслеживал Array цепочку rails и не могу в этом разобраться. Есть идеи?

Черт возьми, я использую rails 2.3.11 и ruby 1.8.7

Комментарии:

1. Кстати, Ruby предлагает такой метод. К сожалению, в 1.8 и 1.9 он называется по-разному. В 1.8 вы можете использовать Array#choice , в 1.9 это Array#sample

Ответ №1:

В моем случае работает нормально :

 Loading development environment (Rails 3.0.3)
ruby-1.9.2-p180 :001 > class Array
ruby-1.9.2-p180 :002?>       def rando
ruby-1.9.2-p180 :003?>            self[ rand(length) ]
ruby-1.9.2-p180 :004?>         end
ruby-1.9.2-p180 :005?>   end
 => nil 
ruby-1.9.2-p180 :006 > arr = %w(hi bye)
 => ["hi", "bye"] 
ruby-1.9.2-p180 :007 > arr.rando
 => "bye"