ruby需要一个字符串到类方法吗?

时间:2011-08-12 15:52:42

标签: ruby

我有一个静态方法的 set 类。类集的示例成员:

    class George

    def self.ugh()
            printf( "Hello world\n" )
    end # self.ugh()

    end # class george

我需要做以下事情,但我没有我需要的东西。

    p George.object_id

我正在使用的代码传递了类名(aka var)。我发现了一个 看似丑陋的解决方案,但它确实有效。

    var = "George" # What I have
    cmd  = "#{var}.object_id"
    p eval( cmd ) # right object_id

我认为有更好的方法。好像红宝石错过了一个 s_to_class()方法。

我找到的唯一其他想法,但是无效。

    klass = class << var; self; end
    p klass.object_id # wrong object_id

    klass = var.singleton_class()
    p klass.object_id # wrong object_id

任何人都知道从a获取类对象(aka接收器)的更好方法 串/符号?

4 个答案:

答案 0 :(得分:4)

如果您有可用的话,ActiveSupport会提供constantize方法。否则,请使用Module#const_get。有关详细信息,请参阅this question

答案 1 :(得分:1)

您可以更改eval使用情况,使其略微恶化:

className = "George"
klass = eval(className)
klass.objectId

但更重要的是,为什么要传递类名而不是自己传递类?类“定义”只是Ruby中的对象,你可以像传递任何其他类型的对象一样传递它们。

答案 2 :(得分:0)

似乎eval是您寻求的字符串到类方法:

eval("George").object_id

答案 3 :(得分:0)

class A; end

id1 = A.object_id
id2 = Object.const_get("A").object_id

puts id1 == id2   #=> true