ruby - 如何从另一个 .rb 文件(如 PHP 中)中获取 "require"代码?

标签 ruby include eval require proc

从 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/

相关文章:

c++ - 是否有像包含目录别名这样的概念?

c - 如何在大型 C 代码库中创建头文件?

javascript - 如何将 "includes()"方法反转为 "not-includes()"并检索未包含的值?

javascript - 如何在严格模式下使用上下文评估自定义 javascript 表达式?

PHP:需要一个 eval() 的替代方法来动态构建多维数组

加载另一个页面后 JavaScript 停止工作

ruby - Ruby 中的关键字在哪里定义?

arrays - 为什么 Range#select 会产生一个 Array 对象?

ruby - 在 YAML 变量中包含 jekyll/liquid 模板数据?

javascript - eval 调用函数,函数又调用定义函数的 eval