2015-01-01 2 views

ответ

2

Точно так же вы добавляете методы ко всем другим модулям.

Если вы хотите добавить метод bar с параметрами baz и quux к модулю Foo вы пишете

module Foo 
    def bar(baz, quux) 
    # code code code 
    end 
end 

Итак, если вы хотите добавить метод histogram к модулю Enumerable вы пишете

module Enumerable 
    # Counts the number of occurrences of each unique object in `self`. 
    # 
    # @return [Hash<E, Integer>] a `Hash` of objects mapped to number of occurrences in `self`. 
    def histogram 
    group_by(&:itself).map {|k, v| [k, v.size] }.to_hash 
    end 
end 
+0

Йоргу, я вошел метод в перечислимом модуле так же, как вы написали, но я все еще получаю Ошибка «NoMethodError: undefined method' my_each ».« Так что я делаю неправильно? Tnx Tom –

3

В Ruby, вы можете использовать monkey-patching, который включает в себя концепцию open classes. Это означает, что классы в Ruby могут быть изменены в любое время. Например, вы можете создать двойной метод в классе чисел.

class Integer < Numeric 
    def self.double 
    self * 2 
    end 
end 

Теперь вы могли бы назвать двойной метод по ряду

4.double 
=> 8 

Надеется, что это помогает

+0

да, но где я должен писать этот фрагмент кода, в каком файле? Tnx Tom –

+0

Где бы вы ни хотели? –

+0

Но когда я пытаюсь запустить его через irb, я получаю «NoMethodError: u ndefined метод 'my_each '". Должен ли я что-то требовать или сказать, где искать? Tnx Tom –