未初始化的常数bigdecimal(nameerror)

nia*_*ian 3 ruby

val = BigDecimal.new("0")
Run Code Online (Sandbox Code Playgroud)

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

然后修改为:

require "bigdecimal"
val = BigDecimal.new("0")
Run Code Online (Sandbox Code Playgroud)

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

题:

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

tad*_*man 5

仅仅因为它在Ruby核心中并不意味着它会自动导入到您的程序中.如果它加载了所有东西,它需要永远让Ruby启动.

正确的方法是使用require.为什么?它只在您需要时加载.

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

  • _"只是因为它在Ruby核心并不意味着它会被自动导入"_ - 这听起来很混乱,因为"核心"通常指的是[核心API](http://ruby-doc.org/core/)其类_are_自动导入,而不是[标准库API](http://ruby-doc.org/stdlib/),其中`BigDecimal`来自. (4认同)