.class
で数値を入力すると、Rubyチュートリアルでは、Bignum
またはFixnum
のいずれかを返します。12345.classが 'Integer'を返すRubyで 'Fixnum'でない
私はこれを行うと、私が代わりにInteger
を得る:
12345.class
#=> Integer
私はMac上でコマンドラインでIRBを使用しています。なぜ上記はチュートリアルのようにFixnum
を返さないのですか?
.class
で数値を入力すると、Rubyチュートリアルでは、Bignum
またはFixnum
のいずれかを返します。12345.classが 'Integer'を返すRubyで 'Fixnum'でない
私はこれを行うと、私が代わりにInteger
を得る:
12345.class
#=> Integer
私はMac上でコマンドラインでIRBを使用しています。なぜ上記はチュートリアルのようにFixnum
を返さないのですか?
Rubyのバージョンによって異なります。 Rubyの2.4.0から、我々はちょうどInteger
秒、これ以上Fixnum
sおよびBignum
の区別
https://www.ruby-lang.org/en/news/2016/12/25/ruby-2-4-0-released/
あなたはより良いチュートリアルを取得する必要があります。
ルビーは、Integer
という名前のクラスが存在することを保証します。それはそれがが存在し、その後、Integer
が完全に抽象的でなければならないが、それはそれらの実装に固有のサブクラスを強制するものではありません義務かの実装固有のサブクラスそのInteger
の実装固有のサブクラスを可能にし、存在する。
I言い換える:
Integer
は常に存在します。Integer
が存在する場合と存在しない場合があります。Bignum
とFixnum
という名前でも、そうでないかもしれません。使用しているチュートリアルは、間違っている(または少なくとも古いものです)。これは、少なくとも2009年のISO Ruby言語仕様の最初の草稿以来正式に文書化されていますが、それ以前でさえもそうでした。
また、Ruby 2.4以前では、FixnumクラスとBignumクラスの両方が** Integerクラスから継承されていたことにも注意してください。だから、コード: '12345.is_a?(Integer)'はすべてのルビーバージョンで常に 'true'を返します。 –
うん、うれしいよ:) – Ursus
...また、Ruby 2.4では(ほとんどの)後方互換性を維持するために、 'Fixnum == Bignum == Integer'に注意してください。私。 '12345.is_a?(Fixnum)#=> true'。しかし、次のような警告も表示されます:* "警告:constant :: Fixnumは推奨されていません" *。 'Fixnum' /' Bignum'への参照はすべて将来のRuby版で完全に削除されるので、コードからすべての参照を削除する必要があります。 –