2013-03-07 3 views
0

Если я хочу добавить метод «хорошо?» в хэш, но применимы только к классу C1 и его подклассу. Как это сделать? , напримерДобавить методы хэша только для класса и его подкласса

class C1 
class Hash 
    def ok? 
     return 'nested hash ok' 
    end 
    end 
def m1 
    return Hash.new.ok? #works 
end 
def m2 
    return {}.ok? #not works 
end 
end 


<<In other file>> 
class C2 < C1 
def m1_1 
    return {}.ok? #not works 
end 
end 

Как добавить '{} .ok? только в С1 & это подкласс C2 без модуля требуется в каждом файле, но некоторые-полосная, как inhirt

ответ

0

Это не добавляет новый метод ::Hash

class C1 
    class Hash 
    def ok? 
     return 'nested hash ok' 
    end 
    end 
end 

Это создает новый класс C1::Hash который не имеет ничего общего с Hash. Если вы хотите, чтобы обезьяна патч ::Hash, но не в международном масштабе, посмотрите на это: http://yehudakatz.com/2010/11/30/ruby-2-0-refinements-in-practice/

Однако, это доступно только в рубин 2.0.0.

Смежные вопросы