我的模块中有一个名为“Date”的类。但是当我想利用与ruby打包的Date类时,它会使用我的Date类。
module Mymod
class ClassA
class Date < Mymod::ClassA
require 'date'
def initialize
today = Date.today # get today's date from Ruby's Date class
puts "Today's date is #{today.to_s}"
end
end
end
end
Mymod::ClassA::Date.new
运行它的输出是
test.rb:7:in `initialize': undefined method `today' for Mymod::ClassA::Date:Class (NoMethodError)
有什么方法可以从我自己的类中引用ruby的Date类,也称为“Date”?
答案 0 :(得分:8)
def initialize
today = ::Date.today # get today's date from Ruby's Date class
puts "Today's date is #{today.to_s}"
end
答案 1 :(得分:5)
在您的代码Date
中隐式查找来自的Date
类声明 Date < Mymod::ClassA
类范围 - 此Date
声明不包括方法today
。
为了引用Ruby的核心Date
类,您需要指定您正在查找根范围。通过在Date
前加::
scope resolution operator:
today = ::Date.today # Resolves to `Date` class in the root scope
然而,实际上,在Ruby核心类中,应该避免命名冲突/冲突。它们在考虑惯例的情况下命名,并且将自定义类命名为其他而不是与核心类相同的名称通常不那么令人困惑/更具描述性。
答案 2 :(得分:0)
我同意其他人的意见,你应该更改班级名称,但你可以这样做:
module Mymod
require 'date'
RubyDate = Date
Date = nil
class ClassA
class Date < Mymod::ClassA
def initialize
today = RubyDate.today # get today's date from Ruby's Date class
puts "Today's date is #{today.to_s}"
end
end
end
end
Mymod::ClassA::Date.new # => Today's date is 2014-01-05