1

私はこの行を実行しています:

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

出力は int ではなく fixnum です。どうしてこれなの?

コントローラーから:

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

4

2 に答える 2

6

intRubyにはそのようなものはありません。は機械語に収まるorFixnumのような小さな数のクラスで、 のサブクラスです。以下を確認してください。12Integer

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、 a 、Numericおよび anObjectです;) この効果はポリモーフィズムと呼ばれ、他のプログラミング言語では数値が特別な方法で扱われるため、このコンテキストで驚くかもしれません (それらはある種の "ネイティブ」タイプ)。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 に答える