模块中的双冒号,调用类构造函数?

时间:2014-02-10 05:11:12

标签: ruby module

以下代码中的:: Schedule.new会做什么?是不是错过了::?

前面的东西
 module Schedulable
      attr_writer :schedule

      def schedule
        @schedule ||= ::Schedule.new
      end

      def schedulable?(start_date, end_date)
        !scheduled?(start_date - lead_days, end_date)
      end

    ..

    end

2 个答案:

答案 0 :(得分:1)

没有。

如果你没有在::前面放任何东西 - 它只是向口译员说要使用全球范围。

即查看对象层次结构的顶层,并在那里查找Schedule类。

答案 1 :(得分:0)

它创建了一个Schedule类的新实例(需要定义),但仅限于尚未定义@schedule。因此在它面前“或等于”。

这是一个简单的测试:

    irb(main):013:0> schedule
    => #<Schedule:0x3b9ccf62> // new Schedule instance
    irb(main):014:0> @schedule
    => #<Schedule:0x3b9ccf62> // same Schedule instance
    irb(main):015:0> @schedule = "foooo" // new value for @schedule
    => "foooo"
    irb(main):016:0> schedule // now method returns new value and no new instance of Schedule
    => "foooo"