私はこの行を実行しています:
<%= @date[i].created_at.strftime('%d').to_i.class %>
出力は int ではなく fixnum です。どうしてこれなの?
コントローラーから:
@date = Lesson.find(:all, :order => 'created_at ASC')
私はこの行を実行しています:
<%= @date[i].created_at.strftime('%d').to_i.class %>
出力は int ではなく fixnum です。どうしてこれなの?
コントローラーから:
@date = Lesson.find(:all, :order => 'created_at ASC')
int
Rubyにはそのようなものはありません。は機械語に収まるorFixnum
のような小さな数のクラスで、 のサブクラスです。以下を確認してください。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
、 a 、Numeric
および anObject
です;) この効果はポリモーフィズムと呼ばれ、他のプログラミング言語では数値が特別な方法で扱われるため、このコンテキストで驚くかもしれません (それらはある種の "ネイティブ」タイプ)。Ruby では、数値は単なるオブジェクトです。
Fixnum は、ネイティブ マシン ワード (マイナス 1 ビット) で表現できる整数値を保持します。Fixnum に対する操作がこの範囲を超えると、値は自動的に Bignum に変換されます。
Fixnum
実際、 は の子クラスですInteger
。