问题标签 [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 投票
4 回答
108 浏览

arrays - 获取 N 项数组的所有 K 项组合的最短代码,其中 K <= N

获取其中 K <= N 的 N 项数组的所有 K 项组合的最短方法是什么?我设法写下以下内容:

任何想法如何摆脱“instance_eval”?它似乎不是很优雅:\

0 投票
2 回答
64 浏览

ruby-on-rails - 如何重构多次使用“instance_exec”的代码?

我正在研究一个使用 Prawn gem 生成 PDF 的类。我有一些类似的方法。所有这些都以同一行开头。这是代码:

有没有办法在每种方法中避免@output.instance_exec并使用块之类的东西?我试过了,但我无法让它工作。我可以做这样的事情吗?

我应该如何定义代码块?

0 投票
3 回答
289 浏览

ruby - 使用 instance_eval 进行 Ruby 改进

我想对 DSL 进行一些改进。我可以使用此示例进行改进:

这会打印出“数组!” 正好。但是一旦我介绍了instance_eval,方法就找不到了:

我得到了undefined method[1]:Array (NoMethodError)`的发言权

有没有办法在 instance_eval 中进行改进?

0 投票
1 回答
231 浏览

ruby - 深入 Ruby class_eval 和 instance_eval

class_eval并且instance_eval在诸如定义方法之类的情况下是可以预测的。我也了解类的实例和类的单例(又名特征类)之间的区别。

我无法弄清楚以下唯一的事情:假设,出于某些战略目的,我们希望使现有类成为单例。

在这两种情况下都得到了

是的,我的意思正是这种方法。

此外,这两个变体给出了相同的结果,就像self在两种情况下都指向类对象

怎么来的?任何人都可以阐明这一点吗?

0 投票
2 回答
250 浏览

ruby - Ruby DSL - 在块上下文中调用用户提供的方法

我的 Ruby DSL 的用户希望能够添加其他方法并在任意块的上下文中调用它们,例如:

在此示例中,“覆盖”是使用 instance_eval 调用的配置对象的方法。

有没有办法强制在配置块的上下文中执行任何方法调用,以便例如可以解决和执行“覆盖”?

[编辑]

所以我构造了根 DSL 对象并评估如下:

这个 DSL 类有一个匹配上述示例中的“项目”的方法:

并且 project_dsl 类有一个与上面示例中的“配置”匹配的方法:

等等。用户希望他在 DSL 文件本身中定义的方法在 ProjectConfigDSL 对象的上下文中执行。

0 投票
2 回答
176 浏览

ruby - 为什么使用“instance_eval”而不是创建方法?

这是一个代码示例:

为什么我们使用instance_eval创建方法(book_name)而不是在类中添加book_name方法Book?在上述情况下,book_name使用创建的方法 ( )instance_eval只能由对象访问。b有什么特别的用例吗?

0 投票
2 回答
101 浏览

ruby - 如何在 Ruby 中临时重新定义方法?

说,我有:

如何临时为return#test的所有实例(现有实例和新实例)创建方法,然后稍后恢复原始方法?Test113

这听起来很简单,但我找不到实现它的好方法。可能是因为我对Ruby的了解不多。

到目前为止我发现的是:

哪个可以完成这项工作,但据我所知,如果存在的话,它也会重新定义现有的#old_test?..感觉就像是一种黑客行为,而不是正确使用元编程?..

  1. 是否可以在不使用别名的情况下做这样的事情(但也可以不修改源代码Test)?
  2. 如果没有(或者如果有更简单/更好的方法),如果您可以修改源代码,您将如何做到这一点Test

如果您能描述实现同一目标的多种方法,即使是那些困难或不切实际的方法,我将不胜感激。只是想了解一下 Ruby 中元编程的灵活性和局限性:)

非常感谢

PS 我开始这一切的原因:我使用 gemrack-throttle来限制以 开头的请求/api,但其他 url 不应该受到影响。我想测试所有这些以确保它有效。为了测试节流,我也必须将中间件添加到测试环境中。ApiController我已经成功地对其进行了测试(使用 minitest),但是不应限制所有其他测试测试,因为如果我们需要在每个请求后等待 1 秒,它会使测试花费更长的时间。

我决定在 minitest 的sRequestSpecificIntervalThrottle#allowed?中用猴子补丁来暂时禁用所有这些测试的节流,然后在s 中再次重新启用它(否则测试节流本身的测试将失败)。如果您告诉我您将如何处理此问题,我将不胜感激。{ true }#setup#teardown

然而,既然我已经开始深入研究元编程,我也只是好奇如何实现这一点(暂时重新定义一个方法),即使我实际上并不打算使用它。

0 投票
4 回答
83 浏览

ruby - 在不同对象之间传递过程

我正在尝试进行以下工作,但我显然遗漏了一些东西:

我的目标是Person执行Animal选择的方法。我也尝试过使用instance_exec但无济于事。

现在我知道我可以使用eval并将方法名称作为字符串传递,但我想避免这种情况。有任何想法吗?

提前致谢

免责声明(各种):
请不要提出代码重组或重写。该问题的目的是更好地了解块在对象之间传递时的行为。