全局变量不改变2个不同函数的时间值
问题描述:
我正在运行此代码,它显示同一时间,但我想要不同的日期,所以我把睡眠,所以它会改变10秒钟的时间。全局变量不改变2个不同函数的时间值
但并没有改变@date_format
r=Time.now
@date_format = r
def self.asd
puts @date_format
sleep 10
end
def self.asd1
puts @date_format
end
我怎么能这样做?
答
这里有一个方法可以为你工作:
>> @date_format = lambda { Time.now }
=> #<Proc:[email protected](irb):5 (lambda)>
>> @date_format.call
=> 2011-12-21 11:20:35 -0500
>> @date_format.call
=> 2011-12-21 11:20:39 -0500
希望它能帮助!
答
如果您想要更改时间,则必须每次分配Time.now
。你在@date_format里面有什么是返回值,而不是方法。
这应该工作:
def self.asd
puts Time.now
sleep 10
end
def self.asd1
puts Time.now
end
编辑
更多钞票的解决你的问题上意见:
class Test
@date_format
def self.date_format
@date_format = Time.now
end
def self.date_format=value
@date_format = value
end
end
您可以使用它的话,像这样:Test.date_format
,每次你调用这个方法,你会得到新的时间,它会更新变量。
让我知道是否有帮助。
设置'@ date_format'的代码在哪里?除非它被更新,否则它不会改变 - 它不会被神奇地重新评估。 – 2011-12-21 16:13:09
代码就是这样。我如何重新评估@date_format? – macwadu 2011-12-21 16:17:36
通过调用一个方法,或者只是调用'Time.now'。如果下一次你想要一个不同的值,存储一个值有什么意义? – 2011-12-21 16:21:07