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

时间:2012-05-25 22:40:36

标签: ruby-on-rails ruby

我正在运行这一行:

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

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

来自控制器:

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

2 个答案:

答案 0 :(得分:6)

Ruby中没有int这样的东西。 Fixnum是适合机器字的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

因此,您的价值同时为FixnumIntegerNumericObject;)此效果称为polymorphism,在这种情况下,它可能会让你大吃一惊,因为在其他一些编程语言中,数字是以特殊方式处理的(它们具有某种“本机”类型)。在Ruby中,数字只是对象。

答案 1 :(得分:1)

  

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

实际上,

FixnumInteger的子类。

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