全局变量不改变2个不同函数的时间值

时间:2011-12-21 16:10:25

标签: ruby

我正在运行此代码并显示相同的时间,但我想要不同的日期,所以我把睡眠所以它会在10秒内改变时间。

但是没有改变@date_format

 r=Time.now  
 @date_format =  r

def self.asd 
puts  @date_format
 sleep 10
end

def self.asd1  
 puts @date_format
end

我该怎么办?

2 个答案:

答案 0 :(得分:2)

以下是一种可能适合您的方法:

>> @date_format = lambda { Time.now }
=> #<Proc:0x007fdaa4800b98@(irb):5 (lambda)>
>> @date_format.call
=> 2011-12-21 11:20:35 -0500
>> @date_format.call
=> 2011-12-21 11:20:39 -0500

希望它有所帮助!

答案 1 :(得分: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并且每当您调用该方法时,您将获得新时间并且它将更新变量。

如果有帮助,请告诉我。