2016-10-18 7 views
2
val = BigDecimal.new("0") 

この文を実行すると、初期化されていない定数bigdecimal(nameerror)エラーが表示されます。大丈夫です未初期化定数bigdecimal(ネーム・エラー)

require "bigdecimal" 
val = BigDecimal.new("0") 

はその後に修正します。 BigDecimalはRuby標準ライブラリに属します。だから私は require 'bigdecimal'する必要がありますか?

質問:BigDecimalを定義している

  • 定義ファイルとは何ですか?私はlibフォルダにファイルが見つかりませんでした。

答えて

4

Rubyコア内にあるからといって、自動的にプログラムにインポートされるわけではありません。 Rubyを始めるには、すべてのものがロードされていればそれは永遠に続くだろう。

これを行う正しい方法は、requireを使用することです。どうして?必要な場合にのみロードされます。

bigdecimal.rbが見つからない理由は、パフォーマンス上の理由からC言語で書かれているためです。実際にはオンデマンドでインポートされるライブラリです。

+0

C言語で書かれていても、 'Ruby'のディレクトリにファイルがあるはずです。テキストファイルやバイナリファイルです。ファイル名は' bigdecimal'ではないかもしれませんが、何ですか?[This link](https ://ruby-doc.org/stdlib-2.2.5/libdoc/bigdecimal/rdoc/BigDecimal.html)は、それが 'bigdecimal/bigdecimal.c'で定義されていることを示しています。しかし、私はこのファイルが見つかりませんでした。 – niaomingjian

+4

_ "コアが自動的にインポートされることを意味するわけではありません" _これは混乱しています。 "コア"は通常[コアAPI](http://ruby-doc.org/core/)を指しているからです。 'BigDecimal'がどこから来るのか[標準ライブラリAPI](http://ruby-doc.org/stdlib/)とは対照的に、クラスは自動的にインポートされます。 – Stefan

+0

ここでは、より良いフレーズのためのいくつかの余地があります。私はRubyにバンドルされているコアライブラリのように "コア"と言っていますが、それは技術的にはRuby標準ライブラリです。 – tadman

0

@tadmanは次のように書いています。拡張機能は、起動時/メモリフットプリントを改善するためにオンデマンドでのみロードされます。

あなたはここにBigDecimal

https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/bigdecimal.cといくつかの他の場所で見つけることができます:それは、ファイルを検索するのは簡単ですGitHubの上

を。 't'を打ち、 'bigdecimal'とタイプすると、この名前のファイルがすべて表示されます。

+0

'Ruby'をインストールしたローカルディレクトリで見つけることができませんか? – niaomingjian

+0

はrubyのインストール方法によって異なります。そのギターに何が悪いですか? –

+0

問題ありません。私は自分のローカルディレクトリで見つけたいだけです。私はRubyInstallerで 'Ruby'をインストールしました。 [here](http://rubyinstaller.org/downloads/) – niaomingjian

関連する問題