【发布时间】:2026-01-24 23:05:01
【问题描述】:
是否可以在 ruby 中从字符串(方法名称)和块(方法的内容)定义实例方法?
我想这将需要使用 instance_eval(),但我还没有弄清楚如何混合这两种数据类型。字符串和块都是动态确定的,因此可以在开头创建带有“def #{string}”的块 - 我不知道该怎么做。
我的用例是一个代表 Bacula 配置文件的类。配置文件可以有许多不同类型的资源。它们都存储在幕后相对复杂的数据结构中(由于其他原因,简化此结构不会完成我正在寻找的东西)。我希望可以通过命名方法快速访问这些资源。
例如,A 代表一个配置文件,B 代表另一个。 A 有资源 Director、Client、Job,B 有 Messages 和 Director。
在这种情况下,A 应该有方法director()、client() 和job(),而B 有messages() 和director()。这些中的每一个都会从对象的相应配置文件中返回相关资源。
我知道有更简单的方法可以做到这一点(比如实现 [] 方法),但出于好奇,我现在正在寻求更难的解决方案。
【问题讨论】:
-
您能否举个简单的例子说明您想在什么地方使用该方法,以及您打算如何使用它?