gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:57:09 24 4
gpt4 key购买 nike

我正在使用 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 以外的任何值时,我得到错误消息,初始化是一个私有(private)方法:

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

对这里可能发生的错误有什么想法吗?

谢谢!!

最佳答案

你不应该在类被实例化后调用类初始化器(你不能从类本身的外部调用,因为它具有私有(private)可见性)。

以下内容不起作用,因为您有一个带有两个参数的初始化程序,因此您还必须传递这些参数:

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

这是有效的,因为在构造类时会调用初始化程序(当您使用 new 创建新实例时,总是会调用 initialize 方法):

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

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

 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

关于ruby-on-rails - Ruby 控制台 - 无法使用变量初始化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com