当类和语句封装在模块中时,为什么会抛出错误?
module Xchange
class Float
def in currency
self.to_s << " " << suffix(currency)
end
private
def suffix currency
case currency
when :euro
"euros"
when :dollar
"dollars"
when :rupee
"rupees"
end
end
end
puts 2.3.in(:euro)
end
答案 0 :(得分:2)
如果您使用的是当前版本的Ruby,我建议您远离monkeypatching并开始使用Refinements(http://www.ruby-doc.org/core-2.1.1/doc/syntax/refinements_rdoc.html)。通过这种方式,您可以更方便地以Ruby原生方式为某些模块引入“monkeypatches”。
答案 1 :(得分:1)
Opps,我的错!我花了一段时间才弄明白!刚尝试使用Pry查看Float类,我惊讶地发现其中没有其他Float方法。所以,我假设Float我试图重新定义不是全球可用的Float。它是名为Xchange::Float
的新类,具有单个实例方法in
!
因此,简而言之,我相信这样的补丁将是全局的,并且是requires
它的所有文件。因此,新版本中的refine
点。
答案 2 :(得分:0)
这是因为您已声明了新的课程Xchange::Float
,而不是打开现有的Float
课程。