我的类名与Ruby';s

我的类名与Ruby';s,ruby,class,conflict,Ruby,Class,Conflict,我的模块中有一个类叫做“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 dat

我的模块中有一个类叫做“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
有什么方法可以从我自己的类(也称为“Date”)中引用ruby的Date类吗


在您的代码
Date
中,从
Date
类范围内隐式查找
Date
类声明–此
Date
声明不包括方法
today

为了引用Ruby的核心
Date
类,您需要指定在根范围中查找。为此,请在
日期前添加以下前缀:


然而事实上,在涉及Ruby核心类时,应该避免命名冲突/冲突。它们是按照约定命名的,通常将自定义类命名为与核心类同名以外的名称比较容易混淆/更具描述性。

我同意其他人的看法,即您应该更改类的名称,但您可以这样做:

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
模块Mymod
需要“日期”
RubyDate=日期
日期=零
甲级
课程日期今天的日期是2014-01-05

::Date
应该会有帮助。
::Date
是答案,但我建议不要给你的类命名为与公共系统类相同的名称,因为其他人更难理解你的代码。
def initialize
        today = ::Date.today # get today's date from Ruby's Date class
        puts "Today's date is #{today.to_s}"
      end
today = ::Date.today # Resolves to `Date` class in the root scope
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