【发布时间】:2020-03-15 03:26:57
【问题描述】:
抱歉,我不知道如何命名,我很难查找此内容因为我不知道该怎么说。总之……
假设我有一个如下所示的类:
class Run
def self.starting
print "starting..."
end
def self.finished
print "Finished!"
end
end
Run 中的所有方法前面都有self,这意味着我不必做run = Run.new,我可以只做Run.starting。现在假设我想添加一些实例变量...
class Run
attr_accessor :starting, :finished
def self.starting
print "starting..."
@starting = true
@finished = false
end
def self.finished
print "finished!"
@starting = false
@finished = true
end
end
如果我想从类外部访问这些实例变量怎么办?我知道像print "#{Run.finished}" 或print "#{Run.starting}" 这样的东西不会做任何事情。如果没有run = Run.new,我可以这样做吗?或者我应该删除self,然后使用run = Run.new? (对不起,如果这个问题是一团糟。)
【问题讨论】:
-
attr_accessor创建 getter 和 setter 方法,这些方法可以发送到类的 instances 以检索或设置该实例的实例变量的值。@starting和@finished是 class 实例变量。要为这些变量创建访问器,您需要在Runs 单例类中执行attr_accessor:class << self; attr_accessor :starting, finished; end。 (试试看。)