问题标签 [instance-eval]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3863 浏览

ruby - send和instance_eval之间的Ruby区别?

我知道 send 接受带有参数的字符串或符号,而 instance_eval 接受字符串或块,并且在给定接收器的情况下,它们的区别可能很明显。

我的问题是以下示例的“引擎盖下”的区别是什么?

0 投票
3 回答
58 浏览

ruby - Ruby:正确使用 Lambda

在开始之前,我尝试摆弄 instance_eval 和单例方法,但无济于事。我将介绍我在这个问题上的“最佳”尝试。

我正在尝试执行以下操作:

上述调用不能更改。

可以改变的是规则的定义方式:

我不确定如何获取 lambda 代码块来获取某物的价值。任何帮助或指向正确方向将不胜感激!

0 投票
5 回答
466 浏览

ruby - Instance_eval 不适用于 do/end 块,仅适用于 {}-blocks

如果我有一堂课:

并运行:

它打印 99,但如果我运行:

它返回一个错误:`instance_eval': wrong number of arguments (0 for 1..3) (ArgumentError)

为什么我不能使用 do/end 块instance_eval

PS 我正在使用 Ruby 2.1.0。

0 投票
0 回答
626 浏览

ruby - 带有自定义定义上下文的 instance_eval

我试图为已经存在的库创建 DSL 定制,但我对 Ruby 块上下文有一些误解。

假设我们有一个块保存为 proc

当我们简单地产生一个块时,这个块的自身上下文不会改变

当我们打电话

此块中的 self 变为 N,默认定义保持不变

当我们在实例上调用 instance_eval

some_block 中的 self 上下文切换到 N 个实例,但默认定义者变为 N 个实例元类

是否有任何方便的方法可以在其他地方的实例和代理定义上下文中产生块?

例如,我有 Delegator 实例,其中包含一些类,我想将定义上下文代理到它:

所以 Definee 已经实现了 DSL,我用 instance_eval 覆盖了它,但是定义上下文不正确。Class_eval 将被委托给 Definee,并且不会调用 MyDelegator 的任何方法,因此它也不能解决问题。

也许有一些更优雅的方式来做这样的事情。有任何想法吗?

编辑:

使用从 Module 继承的类作为委托人解决了我的定义上下文切换问题。

0 投票
1 回答
183 浏览

ruby - Instance_eval 无权访问模块中的类

我遇到了instance_eval模块包含的问题。

请看下面的代码:

当我运行此代码时,我得到

我知道它与绑定以及方法和对象如何绑定到类有关。我无法理解的是我为什么可以访问Cinside A,而不是当我评估block. 我希望它们在同一范围内。

谢谢!

0 投票
1 回答
34 浏览

ruby - instance_eval 在实例方法中的行为

下面是我尝试过的片段,

这里我使用instance_eval 和define_method 动态地向Person 类添加一个方法。但是为什么这表现为实例方法呢?这完全依赖于自己吗?使困惑。任何人都可以解释我或参考链接也很感激。

0 投票
2 回答
228 浏览

ruby - `instance_eval` 和范围

我有以下代码:

method_added钩子被触发时,里面的代码会instance_eval在与添加的方法相同的范围内运行吗?或者,它会在它之外运行吗?

这其中有哪些注意事项和陷阱?

0 投票
2 回答
1751 浏览

ruby - ruby 访问 instance_eval 中的实例变量

我正在尝试一些 ruby​​ 元编程,但对 instance_eval() 感到有些困惑。

见下面的例子

我希望@instance_var 和 local_var 都可以在块中传递/修改,但我得到了

结果我们可以共享(通过/修改)本地变量,instance_val但实例变量属于self不能共享。

关于instance_exec

现在我可以传递我的外部实例 var 并且仍然不能修改它。

使用数组的实例变量,我可以修改我的实例变量,但只能在当前数组对象中

总而言之,instance_eval还是instance_exec使用本地变量而不是实例变量?

我错过了一些概念吗?

0 投票
1 回答
1161 浏览

ruby - 带有 instance_eval 的 Ruby 块作用域

我对 Ruby 块和 procs 的理解是它们都是闭包。现在我已经看到它与 instance_eval 一起使用,我有点困惑。与使用 instance_eval 相比,什么是魔术酱,即查看裸机时的底层工作原理,它改变了块的范围在最常见的用途下的行为方式?

这是一个示例,您可以在 IRB 中转储以了解我的意思。我已经包含了 proc.call 和 block yield 版本示例。令人高兴的是,它们的行为方式相同。

我知道这是 instance_eval 方法的重点,我只是不确定它是如何工作的。

0 投票
3 回答
1397 浏览

ruby - 在 instance_eval 中定义方法

当我在 instance_eval 块中为类定义一个方法时,它会创建一个很好的类方法。

例如)

但是当我在 instance_eval 中使用 define_method 时,它会创建实例方法而不是类方法例如)

我无法理解上述现象。请有人帮帮我。