我正在运行这条线:
<%= @date[i].created_at.strftime('%d').to_i.class %>
并且输出是一个fixnum而不是一个int。为什么是这样?
从控制器:
@date = Lesson.find(:all, :order => 'created_at ASC')
我正在运行这条线:
<%= @date[i].created_at.strftime('%d').to_i.class %>
并且输出是一个fixnum而不是一个int。为什么是这样?
从控制器:
@date = Lesson.find(:all, :order => 'created_at ASC')
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
所以你的值同时是 a Fixnum
, an Integer
, aNumeric
和 an Object
;) 这种效果称为多态性,在这种情况下它可能会让你感到惊讶,因为在其他一些编程语言中,数字以一种特殊的方式处理(它们有某种“本机”类型)。在 Ruby 中,数字只是对象。
Fixnum 包含可以用本机机器字(减 1 位)表示的整数值。如果对 Fixnum 的任何操作超出此范围,则该值将自动转换为 Bignum。
Fixnum
实际上,是 的子类Integer
。