【问题标题】:uninitialized constant bigdecimal (nameerror)未初始化的常量 bigdecimal(名称错误)
【发布时间】:2016-10-18 05:06:25
【问题描述】:
val = BigDecimal.new("0")

运行此语句显示未初始化常量 bigdecimal (nameerror) 错误。

然后修改为:

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

没关系。 BigDecimal 属于 Ruby 标准库。所以我需要require 'bigdecimal'

问题:

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

【问题讨论】:

    标签: ruby


    【解决方案1】:

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

    正确的做法是使用require。为什么?仅在需要时才加载。

    你找不到bigdecimal.rb的原因是因为它是出于性能原因用C编写的,所以它实际上是一个按需导入的库。

    【讨论】:

    • 即使是C写的,在Ruby的目录下也应该有一个文件。文本文件或二进制文件。可能文件名不是bigdecimal,但它是什么?@ 987654321@ 显示它在bigdecimal/bigdecimal.c 中定义。但是我没有找到这个文件。
    • “仅仅因为它在 Ruby 核心中并不意味着它会自动导入” – 这听起来令人困惑,因为“核心”通常指的是 Core API 其类 自动导入的,而不是BigDecimal来自的Standard Library API
    • 这里有一些更好的措辞空间。我说与 Ruby 捆绑在一起的核心库中的“核心”,但你是对的,它在技术上是 Ruby 标准库。
    【解决方案2】:

    正如@tadman 所写:扩展仅按需加载,以缩短启动时间/内存占用。

    你可以在这里找到BigDecimal

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

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

    【讨论】:

    • 在我安装Ruby的本地目录中找不到它吗?
    • 取决于您如何安装 ruby​​。 github上的那个有什么问题?
    • 没问题。我只想在我的本地目录中找到它。我用 RubyInstaller 安装了Rubyhere
    • 抱歉,我不会使用 windows,所以帮不上什么忙。
    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 2016-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多