2011-12-21 90 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