如何在Ruby中改进模块方法?

前端之家收集整理的这篇文章主要介绍了如何在Ruby中改进模块方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你可以改进你的课程
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(期望的Class)

解决方法

这段代码将起作用:
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

说明:

定义模块#method是equivalent,用于在其#singleton_class上定义实例方法.

原文链接:https://www.f2er.com/ruby/269052.html

猜你在找的Ruby相关文章