2017-01-05 8 views
1

Я хочу уточнить метод, расположенный в классе внутри модуля, но, несмотря на то, что он пытается улучшить класс, у меня не может быть усовершенствованного кода:Как усовершенствовать метод из класса внутри модуля

module App 
    module Entities 
    class User 
     def self.name(name) 
     puts "Original name: #{name}" 
     end 
    end 
    end 
end 

module RefinedUser 
    refine App::Entities::User do 
    def self.name(name) 
     puts "Refined name: #{name}" 
    end 
    end 
end 

class Runner 
    def original 
    App::Entities::User.name('Forest') 
    end 

    using RefinedUser 

    def refined 
    App::Entities::User.name('Forest') 
    end 
end 

r = Runner.new 
r.original 
r.refined 

Выход: Original name: Forest Original name: Forest

ответ

1

Вам нужно уточнить App :: Entities :: пользователя с его singleton_class. Потому что name - метод класса.

App::Entities::User is ok. 

module RefinedUser 
    refine App::Entities::User.singleton_class do 
    def name(name) 
     puts "Refined name: #{name}" 
    end 
    end 
end 

using RefinedUser 

class Runner 
    def refined 
    App::Entities::User.name('Forest') 
    end 
end 

r = Runner.new 
r.refined 
=>Refined name: Forest 
+0

Вы пытались запустить свой код? –

+0

Нет, но я видел ту же ситуацию раньше. –

+1

Я обновил свой неправильный ответ, надеюсь, что это будет полезно. –

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

  • Нет связанных вопросов^_^