Ruby控制台 - 无法使用变量初始化类

时间:2012-07-09 14:01:15

标签: ruby-on-rails ruby

我正在使用Ruby控制台。我是通过使用Rails console启动它,然后确实需要我的文件路径'哪个工作正常。

该文件如下所示:

module App
  module Tools
    module Pollers
      class Kpi
        attr_reader :start_time,:stop_time

        def initialize(start_time,stop_time)
          @start_time = start_time
          @stop_time = stop_time
        end

        def create_social_audiences
        ....

所以我所做的是在控制台中声明这样的停止和开始时间

var end_date = new Date(2012, 7, 1);
var start  = new Date(2012, 5, 1);

然后我尝试在此文件上调用.new并获得此错误

>> kpi = App::Tools::Pollers::Kpi.new
ArgumentError: wrong number of arguments (0 for 2)
    from (irb):7:in `initialize'
    from (irb):7:in `new'
    from (irb):7
>> 

但奇怪的是,如果我执行此命令试图传递它起作用的变量:

>> kpi = App::Tools::Pollers::Kpi.new(start , end_date)
=> #<App::Tools::Pollers::Kpi:0x11489e198 @start_time=nil, @stop_time=nil>

但是当我尝试将varialbes设置为除nil之外的任何内容时,我得到的错误是初始化是一个私有方法:

?> kpi.initialize(start, end_date)
NoMethodError: private method `initialize' called for #<App::Tools::Pollers::Kpi:0x11489e198>
    from (irb):15

对这里可能发生的事情的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:4)

在实例化类之后,不应该调用类初始值设定项(并且如果它具有私有可见性,则不能从类本身之外调用它)。

以下不起作用,因为您有一个带有两个参数的初始值设定项,因此您还必须传递它们:

kpi = App::Tools::Pollers::Kpi.new

这是有效的,因为在构造类时会调用初始值设定项(使用initialize创建新实例时始终会调用new方法):

kpi = App::Tools::Pollers::Kpi.new(start , end_date)

最后,以下内容不起作用(无论start / end_date保持什么值),因为正如我之前解释的那样,类的初始化程序在ruby中是私有的:

 kpi.initialize(start, end_date) # Breaks!

如果要在构造类之后修改这些变量,请为其创建一个方法:

def initialize(start, end)
    set_time(start_end)
end

def set_time(start, end)
    @start_time = start
    @end_time = end
end