Ruby中的Sleep语句不接受任何rails转换

Har*_*ari 2 ruby ruby-on-rails

我觉得这很奇怪.为什么我不能这样做?:

puts Time.now
x=2
puts x
puts x.class
sleep x
puts Time.now
x=x.seconds
puts x
puts x.class
sleep (x)
puts Time.now
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

Mon Oct 01 16:14:58 +0530 2012
2
Fixnum
Mon Oct 01 16:15:00 +0530 2012
2
Fixnum
rake aborted!
can't convert ActiveSupport::Duration into time interval
/Users/hariharanganapathiraman/Documents/MigrationScripts/sample/lib/import/boot.rb:23:in `sleep'
Run Code Online (Sandbox Code Playgroud)

同样,它不适用于.minutes.days.

Vic*_*roz 5

那是因为ActiveSupport::Duration模仿自己是Fixnum班级:

ActiveSupport::Duration.new(3600, [[:seconds, 3600]]).class #=> Fixnum
Run Code Online (Sandbox Code Playgroud)

使用sleep(2.seconds.to_i).