为什么我的字符串在使用 .to_i 而不是整数时转换为 Fixnum



我正在运行这一行:

<%= @date[i].created_at.strftime('%d').to_i.class %>

输出是固定数字而不是整数。这是为什么呢?

从控制器:

@date = Lesson.find(:all, :order => 'created_at ASC')

Ruby 中没有这样的事情intFixnum是适合机器词的小数字类,如12,它是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同时;)这种效应称为多态性,在这种情况下可能会让您感到惊讶,因为在其他一些编程语言中,数字以特殊方式处理(它们具有某种"本机"类型)。在 Ruby 中,数字只是对象。

Fixnum 包含可以用本机计算机字(减去 1 位)表示的整数值。如果对 Fixnum 的任何操作超过此范围,则该值将自动转换为 Bignum。

Fixnum实际上是Integer的孩子班。

请参阅 http://www.ruby-doc.org/core-1.9.3/Integer.html

最新更新