【问题标题】:Is it possible to do dynamic variables in ruby? [duplicate]是否可以在红宝石中做动态变量? [复制]
【发布时间】:2011-01-11 05:43:24
【问题描述】:

我可以通过其他方式实现这种动态特性,但这让我产生了好奇。 Ruby中是否有类似的机制?

$varname = "hello";
$$varname = "world";
echo $hello;  //Output: world

【问题讨论】:

    标签: php ruby


    【解决方案1】:

    您可以使用eval 实现类似的效果

    x = "myvar"
    myvar = "hi"
    eval(x) -> "hi"
    

    【讨论】:

      【解决方案2】:

      只有实例变量(和类变量)才有可能:

      class MyClass
        def initialize
          @varname = :"@hello"
          instance_variable_set @varname, "world"
        end
      
        def greet
          puts instance_variable_get(@varname)
        end
      end
      
      MyClass.new.greet
      #=> "world"
      

      对于局部变量,您必须使用eval

      【讨论】:

      • 第 3 行有多余的冒号吗?
      • 是的,冒号相当于在字符串文字上调用 to_sym:将其转换为符号。
      • IOW :"abcdef" == "abcdef".to_sym == :abcdef,你也可以使用插值:"#{klazz}_#{id}" == "#{klazz}_#{id}".to_sym
      • 这就是我想要的!谢谢@molf!
      猜你喜欢
      • 1970-01-01
      • 2011-01-25
      • 2017-04-01
      • 2016-10-14
      • 1970-01-01
      • 2011-04-26
      • 2011-03-17
      • 2015-12-23
      • 2011-07-06
      相关资源
      最近更新 更多