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

Запуск этого утверждения показывает неинициализированную константу bigdecimal (nameerror).uninitialized constant bigdecimal (nameerror)

Затем изменения в:

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

Это нормально. BigDecimal относится к стандартной библиотеке Ruby. Так мне нужно require 'bigdecimal'?

Вопрос:

  • Где BigDecimal определяется?
  • Какой файл определён? Я не нашел файл в папке lib.

ответ

4

Просто потому, что он в ядре Ruby не означает, что он автоматически импортируется в вашу программу. Если бы он загрузил все, что понадобилось бы навсегда, чтобы запустить Ruby.

Правильный способ сделать это - использовать require. Зачем? Он загружен только в том случае, если вам это нужно.

Причина, по которой вы не можете найти bigdecimal.rb, объясняется тем, что она написана на языке C по соображениям производительности, поэтому это библиотека, которая фактически импортируется по требованию.

+0

Даже если он написан на C, должен быть файл в каталоге 'Ruby'.A текстовый файл или двоичный файл. Может быть, имя файла не является' bigdecimal', однако что это такое? [Эта ссылка] (https : //ruby-doc.org/stdlib-2.2.5/libdoc/bigdecimal/rdoc/BigDecimal.html) показывает, что он определен в 'bigdecimal/bigdecimal.c'. Но я не нашел этот файл. – niaomingjian

+4

_ «Просто потому, что он в ядре Ruby не означает, что он автоматически импортируется» _ - это звучит запутанно, поскольку «ядро» обычно относится к [Core API] (http://ruby-doc.org/core/) классы _are_ автоматически импортируются, в отличие от [Standard Library API] (http://ruby-doc.org/stdlib/), откуда приходит «BigDecimal». – 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. Что не так с тем, что было на github? –

+0

Нет проблем. Я только хочу найти его в своем локальном каталоге. Я установил Ruby с RubyInstaller. [здесь] (http://rubyinstaller.org/downloads/) – niaomingjian

Смежные вопросы