问题标签 [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.
arrays - 获取 N 项数组的所有 K 项组合的最短代码,其中 K <= N
获取其中 K <= N 的 N 项数组的所有 K 项组合的最短方法是什么?我设法写下以下内容:
任何想法如何摆脱“instance_eval”?它似乎不是很优雅:\
ruby-on-rails - 如何重构多次使用“instance_exec”的代码?
我正在研究一个使用 Prawn gem 生成 PDF 的类。我有一些类似的方法。所有这些都以同一行开头。这是代码:
有没有办法在每种方法中避免@output.instance_exec
并使用块之类的东西?我试过了,但我无法让它工作。我可以做这样的事情吗?
我应该如何定义代码块?
ruby - 使用 instance_eval 进行 Ruby 改进
我想对 DSL 进行一些改进。我可以使用此示例进行改进:
这会打印出“数组!” 正好。但是一旦我介绍了instance_eval
,方法就找不到了:
我得到了undefined method
[1]:Array (NoMethodError)`的发言权
有没有办法在 instance_eval 中进行改进?
ruby - 深入 Ruby class_eval 和 instance_eval
class_eval
并且instance_eval
在诸如定义方法之类的情况下是可以预测的。我也了解类的实例和类的单例(又名特征类)之间的区别。
但
我无法弄清楚以下唯一的事情:假设,出于某些战略目的,我们希望使现有类成为单例。
在这两种情况下都得到了
是的,我的意思正是这种方法。
此外,这两个变体给出了相同的结果,就像self
在两种情况下都指向类对象
怎么来的?任何人都可以阐明这一点吗?
ruby - Ruby DSL - 在块上下文中调用用户提供的方法
我的 Ruby DSL 的用户希望能够添加其他方法并在任意块的上下文中调用它们,例如:
在此示例中,“覆盖”是使用 instance_eval 调用的配置对象的方法。
有没有办法强制在配置块的上下文中执行任何方法调用,以便例如可以解决和执行“覆盖”?
[编辑]
所以我构造了根 DSL 对象并评估如下:
这个 DSL 类有一个匹配上述示例中的“项目”的方法:
并且 project_dsl 类有一个与上面示例中的“配置”匹配的方法:
等等。用户希望他在 DSL 文件本身中定义的方法在 ProjectConfigDSL 对象的上下文中执行。
ruby - 为什么使用“instance_eval”而不是创建方法?
这是一个代码示例:
为什么我们使用instance_eval
创建方法(book_name
)而不是在类中添加book_name
方法Book
?在上述情况下,book_name
使用创建的方法 ( )instance_eval
只能由对象访问。b
有什么特别的用例吗?
ruby - 如何在 Ruby 中临时重新定义方法?
说,我有:
如何临时为return#test
的所有实例(现有实例和新实例)创建方法,然后稍后恢复原始方法?Test
113
这听起来很简单,但我找不到实现它的好方法。可能是因为我对Ruby的了解不多。
到目前为止我发现的是:
哪个可以完成这项工作,但据我所知,如果存在的话,它也会重新定义现有的#old_test
?..感觉就像是一种黑客行为,而不是正确使用元编程?..
- 是否可以在不使用别名的情况下做这样的事情(但也可以不修改源代码
Test
)? - 如果没有(或者如果有更简单/更好的方法),如果您可以修改源代码,您将如何做到这一点
Test
?
如果您能描述实现同一目标的多种方法,即使是那些困难或不切实际的方法,我将不胜感激。只是想了解一下 Ruby 中元编程的灵活性和局限性:)
非常感谢
PS 我开始这一切的原因:我使用 gemrack-throttle
来限制以 开头的请求/api
,但其他 url 不应该受到影响。我想测试所有这些以确保它有效。为了测试节流,我也必须将中间件添加到测试环境中。ApiController
我已经成功地对其进行了测试(使用 minitest),但是不应限制所有其他测试测试,因为如果我们需要在每个请求后等待 1 秒,它会使测试花费更长的时间。
我决定在 minitest 的sRequestSpecificIntervalThrottle#allowed?
中用猴子补丁来暂时禁用所有这些测试的节流,然后在s 中再次重新启用它(否则测试节流本身的测试将失败)。如果您告诉我您将如何处理此问题,我将不胜感激。{ true }
#setup
#teardown
然而,既然我已经开始深入研究元编程,我也只是好奇如何实现这一点(暂时重新定义一个方法),即使我实际上并不打算使用它。
ruby - 在不同对象之间传递过程
我正在尝试进行以下工作,但我显然遗漏了一些东西:
我的目标是Person
执行Animal
选择的方法。我也尝试过使用instance_exec
但无济于事。
现在我知道我可以使用eval
并将方法名称作为字符串传递,但我想避免这种情况。有任何想法吗?
提前致谢
免责声明(各种):
请不要提出代码重组或重写。该问题的目的是更好地了解块在对象之间传递时的行为。