我正在使用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
对这里可能发生的事情的任何想法?
谢谢!
答案 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