从 PHP 背景转向 Ruby,我习惯了使用 require
, require_once
, include
,或include_once
它们都有类似的效果,但关键是它们继续在相同范围内处理代码,其中 include
/require
命令被调用。
示例:
sub.php
<?php
echo $foo;
main.php
<?php
$foo = 1234;
include('sub.php'); // outputs '1234'
当我第一次开始使用 Ruby 时,我尝试包含/require/require_relative/load other .rb
文件,并且在对它无法按照我期望的方式工作而感到有点沮丧之后,我决定有更好的方法来分解大文件,并且 Ruby 不需要像 PHP 那样表现。
但是,有时我觉得出于测试目的,最好从另一个 .rb
加载代码。文件的方式与 PHP 相同 - 在相同的范围内访问所有相同的变量 - 无需使用类/实例变量或常量。这可能吗?也许以某种方式使用 proc/binding/或 eval 命令?
再说一遍,我并不提倡在开发过程中使用它 - 但我很好奇它是否可能 - 如果可以,如何实现?
最佳答案
是的,这是可能的,尽管我肯定不建议这样做。这有效:
includer.rb
:
puts var
include.rb
:
var = "Hello!"
eval(File.read("include.rb"), binding)
运行此命令(Ruby 2.2.1、Ruby 1.9.3)将打印 Hello!
。它的工作原理很简单:eval
采用一个可选的绑定(bind)来评估它传递的代码,Kernel#binding
返回当前的绑定(bind)。
关于ruby - 如何从另一个 .rb 文件(如 PHP 中)中获取 "require"代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487002/