Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby中的Sleep语句不';我不接受任何轨道转换_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Ruby中的Sleep语句不';我不接受任何轨道转换

Ruby on rails Ruby中的Sleep语句不';我不接受任何轨道转换,ruby-on-rails,ruby,Ruby On Rails,Ruby,我觉得这很奇怪。为什么我不能这样做 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 我得到的结果是: Mon Oct 01 16:14:58 +0530 2012 2 Fixnum Mon Oct 01 16:15:00 +0530 2012 2 Fixnum rake aborted! can't conver

我觉得这很奇怪。为什么我不能这样做

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
我得到的结果是:

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'

类似地,它在
.minutes
.days
内不起作用,这是因为
ActiveSupport::Duration
将自身模拟为
Fixnum
类:

ActiveSupport::Duration.new(3600, [[:seconds, 3600]]).class #=> Fixnum

使用
sleep(2.seconds.to_i)
问题在于
ActiveSupport::Duration
它继承自
BasicObject
,它只有有限数量的方法,没有
class
方法。 如果您查看ActiveSupport::Duration,您将看到所有方法都被代理(通过method_missing)到
@value
,在您的例子中就是Fixnum

因此,由于
ActiveSupport::Duration
没有类方法,因此类调用
x秒
转到
Fixnum