当你require 'something'
Ruby 搜索一个名为something.rb
或者something.dll/so/bundle
取决于你的平台的文件时。
如果它找到一个库dll/so/bundle
,它会动态加载它并搜索一个名为Init_something
. 创建本机扩展时的约定是包含这样一个函数,Ruby 解释器使用它来连接事物。
intrepeter 在哪里(在哪些目录中)查找 rb 文件和库由加载路径确定,您可以使用解释器的 -I 选项附加该路径。在运行时,当前加载路径位于$:
(您也可以在运行时将更多目录附加到此路径),例如:
$ irb
irb(main):001:0> puts $:
/opt/local/lib/ruby/site_ruby/1.8
/opt/local/lib/ruby/site_ruby/1.8/i686-darwin9
/opt/local/lib/ruby/site_ruby
/opt/local/lib/ruby/vendor_ruby/1.8
/opt/local/lib/ruby/vendor_ruby/1.8/i686-darwin9
/opt/local/lib/ruby/vendor_ruby
/opt/local/lib/ruby/1.8
/opt/local/lib/ruby/1.8/i686-darwin9
.
查看 require 的文档(http://ruby-doc.org/core-1.8.7/classes/Kernel.html#M001077)
我不确定你的意思是:
PS 我现在必须使用的唯一暴露的 Ruby 部分是“msvcrt-ruby18.dll”
你还提到了一些关于沙盒的事情。这可能会干扰您需要模块的能力。搜索 $SAFE,如果 $SAFE 设置为 >2,您将根本无法使用require
。