2011-12-21 15 views
0

私はこのコードを実行していますが、同じ時刻を表示しますが、異なる日付が欲しかったので、睡眠を入れて10秒で時間を変更します。 グローバル変数は2つの異なる関数の時間の値を変更しません

しかし

r=Time.now 
@date_format = r 

def self.asd 
puts @date_format 
sleep 10 
end 

def self.asd1 
puts @date_format 
end 

どのように私はこのような何かを行うことができます@date_format変更されていませんか?

+0

'@ date_format'を設定するコードはどこにありますか?それが更新されない限り、それは変更されません - それは魔法のように再評価されません。 –

+0

コードはこれだけです。 @date_formatをどのように再評価できますか? – macwadu

+0

メソッドを呼び出すか、 'Time.now'を呼び出すだけです。次回別の値が必要な場合は、値を格納するポイントは何ですか? –

答えて

2

はあなたのために働くことができる1つのアプローチです:

>> @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'を呼び出すだけではないことは確信できません。編集後にさらに悪い。 –

+0

おそらくそうではありませんが、私はこの簡単な例を超えて、これに良い用途があると思います。そして、編集はOPの変数にマッチするだけでした。 – Brian

+0

これは動作しますが、strftimeを使用すると動作しません。 r = Time.now r = r.strftime( "%Y-%m-%d%H:%M:%S") @date_format = lambda {r} – macwadu

1

時間を変更したい場合は、毎回Time.nowを割り当てる必要があります。 @date_formatの中にあるものは、メソッドではなく戻り値です。これは動作するはず

def self.asd 
puts Time.now 
sleep 10 
end 

def self.asd1 
puts Time.now 
end 

編集

コメントのあなたの質問にでとりうるソリューション:Test.date_formatと毎回:

class Test 
    @date_format 

    def self.date_format 
    @date_format = Time.now 
    end 
    def self.date_format=value 
    @date_format = value 
    end 
end 

あなたはこのように、それを使用することができますそのメソッドを呼び出すと、新しい時間が得られ、変数が更新されます。

それが役立つかどうか教えてください。ここで

+0

私はそれを呼び出すたびに@date_formatを変更する方法はありますか? – macwadu

+0

追加して編集すると、それが役に立ったら教えてください – Deleteman

関連する問題