未初始化常量bigdecimal(NameError)

3
val = BigDecimal.new("0")

运行此语句会显示未初始化常量bigdecimal(nameerror)错误。 然后修改为:
require "bigdecimal"
val = BigDecimal.new("0")

没问题。BigDecimal属于Ruby标准库。所以我需要require 'bigdecimal'吗?

问题:

  • BigDecimal在哪里定义的?
  • 定义文件是什么?我在lib文件夹中没有找到该文件。
2个回答

5

仅仅因为它在Ruby核心中并不意味着它会自动导入到您的程序中。如果加载了所有内容,启动Ruby需要很长时间。

正确的方法是使用require。为什么?只有在需要时才会加载。

您找不到bigdecimal.rb的原因是因为它是以C语言编写的,出于性能考虑,它是按需导入的库。


即使它是用C语言编写的,也应该有一个文件在 Ruby 的目录中。可能是文本文件或二进制文件。也许文件名不是 bigdecimal,但是它是什么呢?此链接 显示其定义在 bigdecimal/bigdecimal.c 中。但我没有找到这个文件。 - niaomingjian
4
“仅仅因为某个东西在Ruby核心中,并不意味着它会被自动导入”——这句话听起来有些让人困惑,因为“核心”通常指的是核心API,其类是自动导入的,与标准库API(http://ruby-doc.org/stdlib/)相反,`BigDecimal`是从这里导入的。 - Stefan
这里有一些可以更好措辞的空间。我说“核心”,指的是与Ruby捆绑在一起的核心库,但你说得对,技术上来说它是Ruby标准库。 - tadman

0

正如@tadman所写:扩展仅在需要时加载,以提高启动时间/内存占用。

您可以在此处找到BigDecimal

https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/bigdecimal.c和其他一些地方:

在GitHub上搜索文件很容易。只需按“t”键,然后键入“bigdecimal”,您就会看到所有具有此名称的文件。


我不能在我安装Ruby的本地目录中找到它吗? - niaomingjian
这取决于您如何安装Ruby。Github上的那个有什么问题吗? - Pascal
没问题。我只想在我的本地目录中找到它。我使用RubyInstaller安装了Ruby这里 - niaomingjian
抱歉,我不使用Windows,所以无法提供太多帮助。 - Pascal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接