Когда вы require 'something'
Ruby ищет файл с именем something.rb
или something.dll/so/bundle
в зависимости от вашей платформы.
В случае, если он находит библиотеку dll/so/bundle
, он динамически загружает ее и ищет символ с именем Init_something
. Соглашение при создании собственного расширения должно включать такую функцию, которая используется интерпретатором ruby для подключения.
Где (в каких каталогах) анализатор ищет 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 )
Я не уверен, что вы подразумеваете под:
P.S. Единственная открытая часть Ruby I
должен работать с сейчас
'MSVCRT-ruby18.dll'
Также вы упомянули кое-что о песочнице. Это может помешать вашей способности требовать модули. Найдите $ SAFE, если для $ SAFE установлено значение> 2, вы вообще не сможете использовать require
.