【问题标题】:Can I create an instance of a class using a designated name?我可以使用指定名称创建类的实例吗?
【发布时间】:2012-05-07 05:42:27
【问题描述】:

我已经用 ruby​​ 写了一个类,叫它Foo。现在我想创建它的一些实例。但是,我想使用存储在变量中的值作为实例的名称。

例如,变量bar的值为“ABC”。现在我想将新实例的名称命名为“ABC”作为语句 ABC = Foo.new

我能意识到这一点吗?如果可能,请告诉我如何。谢谢!!!

【问题讨论】:

    标签: ruby class instance


    【解决方案1】:

    在 Ruby 中,您也不应该害怕使用 eval(),只要您只向它提供由您(程序员)构建的数据,而不会受到不安全的外部影响。在这种情况下,

    cocos = "ABC"
    class_sym = :Foo
    eval "#{cocos} = #{class_sym}.new"
    

    Eval 在许多语言中名声不佳,但在 Ruby 中,它相当舒适,基本上与静态代码一样快。

    【讨论】:

    • 非常感谢。这真的很有帮助。
    • 我知道确实如此。 #eval 是一把锤子,尤其是在您学习那些较弱且因此更安全的方法之前,例如在本例中为 self.class.const_set(:ABC, self.class.const_get(:Foo).new) :)))跨度>
    【解决方案2】:

    作为本地变量,不可以,但是可以使用instance_variable_set和朋友将创建的对象命名为实例变量。

    【讨论】:

      【解决方案3】:

      如果您真的在使用常量,也可以使用const_set

      constant = 'ABC'
      Object.const_set constant.to_sym, Foo.new
      

      【讨论】:

        猜你喜欢
        • 2022-11-09
        • 1970-01-01
        • 2020-06-17
        • 2023-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多