ruby - 如何改进 Ruby 中的模块方法?

标签 ruby ruby-2.0 ruby-2.1 ruby-2.2

您可以使用

优化您的类(class)
module RefinedString
  refine String do
    def to_boolean(text)
    !!(text =~ /^(true|t|yes|y|1)$/i)
    end
  end
end

但是如何细化模块方法呢? 这:

module RefinedMath
  refine Math do
    def PI
      22/7
    end
  end
end

引发:TypeError:错误的参数类型模块(预期类)

最佳答案

这段代码可以工作:

module Math
  def self.pi
    puts 'original method'
   end
end

module RefinementsInside
  refine Math.singleton_class do
    def pi
      puts 'refined method'
    end
  end
end

module Main
  using RefinementsInside
  Math.pi #=> refined method
end

Math.pi #=> original method

说明:

定义一个模块#methodequivalent在其 #singleton_class 上定义实例方法。

关于ruby - 如何改进 Ruby 中的模块方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32115323/

相关文章:

ruby-on-rails - Ruby 2.0.0,而不是 Rails 站点上推荐的 2.1.0?

ruby - 用元素填充数组 N 次

ruby - "Parent", "Child"Ruby 中的类(非继承)

ruby - 为什么 "each"-ing 范围仅适用于递增范围?

即使安装了 gem,Ruby 2.0.0 也无法加载此类文件

ruby-on-rails - Rails 安装 Ruby 2.1 失败

ruby-on-rails - Ruby 2.1.0/2.1.1/2.1.2 不支持调试器 gem

ruby-on-rails - 在 rails 中测试 - 表单中的第一个参数不能包含 nil 或为空

ruby - 哪个paypal api只获取所有交易

ruby-on-rails - 如何获取调用别名方法的名称?