2011-12-21 89 views
0

我正在运行此代码,它显示同一时间,但我想要不同的日期,所以我把睡眠,所以它会改变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 

我怎么能这样做?

+0

设置'@ date_format'的代码在哪里?除非它被更新,否则它不会改变 - 它不会被神奇地重新评估。 – 2011-12-21 16:13:09

+0

代码就是这样。我如何重新评估@date_format? – macwadu 2011-12-21 16:17:36

+0

通过调用一个方法,或者只是调用'Time.now'。如果下一次你想要一个不同的值,存储一个值有什么意义? – 2011-12-21 16:21:07

回答

2

这里有一个方法可以为你工作:

>> @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 

希望它能帮助!

+0

不相信这只是调用'Time.now'。编辑后更糟。 – 2011-12-21 16:21:29

+0

可能不是,但我可以想象,除了这个微不足道的例子之外,还有一些很好的用途。编辑只是为了匹配OP的变量。 – Brian 2011-12-21 16:26:21

+0

这工作,但是当我使用strftime它不工作? r = Time.now r = r.strftime(“%Y-%m-%d%H:%M:%S”) @date_format = lambda {r} – macwadu 2011-12-21 16:45:17

1

如果您想要更改时间,则必须每次分配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,每次你调用这个方法,你会得到新的时间,它会更新变量。

让我知道是否有帮助。

+0

有没有办法在每次我打电话时更改@date_format? – macwadu 2011-12-21 16:18:13

+0

添加和编辑,让我知道如果这有帮助 – Deleteman 2011-12-21 16:23:56