我正在运行这一行:
<%= @date[i].created_at.strftime('%d').to_i.class %>
并且输出是fixnum而不是int。这是为什么?
来自控制器:
@date = Lesson.find(:all, :order => 'created_at ASC')
答案 0 :(得分:6)
Ruby中没有int
这样的东西。 Fixnum
是适合机器字的1
或2
等小数字类,它是Integer
的子类。请检查以下内容:
irb(main):004:0> 42.class
=> Fixnum
irb(main):005:0> 42.is_a? Fixnum
=> true
irb(main):006:0> 42.is_a? Integer
=> true
irb(main):007:0> 42.is_a? Numeric
=> true
irb(main):008:0> 42.is_a? Object
=> true
因此,您的价值同时为Fixnum
,Integer
,Numeric
和Object
;)此效果称为polymorphism,在这种情况下,它可能会让你大吃一惊,因为在其他一些编程语言中,数字是以特殊方式处理的(它们具有某种“本机”类型)。在Ruby中,数字只是对象。
答案 1 :(得分:1)
实际上,Fixnum保存可以在本机机器字(减1位)中表示的整数值。如果Fixnum上的任何操作超出此范围,则该值将自动转换为Bignum。
Fixnum
是Integer
的子类。