【问题标题】:How to refine a method from a class inside a module如何从模块内的类中细化方法
【发布时间】:2017-01-06 21:05:09
【问题描述】:

我想优化位于模块内的类中的方法,但尽管尝试优化类,但我无法运行优化后的代码:

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

【问题讨论】:

    标签: ruby refinements


    【解决方案1】:

    您需要使用他的singleton_class 细化 App::Entities::User。因为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
    

    【讨论】:

    • 不,但我以前也遇到过同样的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    相关资源
    最近更新 更多