#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"