1

我正在运行这条线:

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

并且输出是一个fixnum而不是一个int。为什么是这样?

从控制器:

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

4

2 回答 2

6

Ruby 中没有这样的东西int。是适合机器词Fixnum的小数类1,它是 的子类。检查以下内容:2Integer

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 中,数字只是对象。

于 2012-05-25T22:44:32.717 回答
1

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

Fixnum实际上,是 的子类Integer

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

于 2012-05-25T22:44:25.497 回答