【发布时间】:2018-06-19 07:25:53
【问题描述】:
我需要将一个类的引用保存到一个哈希中:
@hash['foo'] = bar if bar.is_a?(Class)
上面这段代码在我的/lib目录下,它不是每次都自动加载的,bar通常是一个自动加载的类。为了避免在我reload!我的代码时出现“xxx的副本已从模块树中删除但仍处于活动状态”错误,我试图将bar解析为全局范围,即:添加@987654326 @ 在类名之前(Baz 正在变为 ::Baz)。
我不确定如何在不将类转换为字符串、添加::,然后将其转换回类的情况下动态执行此操作。
【问题讨论】:
-
常量在赋值时被解析。就像
A = 1; hash['a'] = A; A = 2- 常量和散列之后指的是不同的对象。添加::不会改变任何东西。 -
我明白了。那么我该如何克服我的问题中提到的错误呢?
-
要么通过存储常量的名称并使用
const_get/constantize(这是您试图避免的),要么通过使用 proc,例如@hash['foo'] = -> { Baz }可以通过@hash['foo'].call动态解析 -
看起来很公平。您可以提交它作为答案吗?我愿意接受!
标签: ruby-on-rails ruby class autoload