【问题标题】:How can I use a variable as a variable name in Ruby?如何在 Ruby 中使用变量作为变量名?
【发布时间】:2010-02-22 08:25:13
【问题描述】:

我怎样才能使下面的代码工作,使puts 都显示1

video = []
name = "video"

name[0] = 1

puts name[0] #gives me 1
puts video[0] #gives me nil

【问题讨论】:

标签: ruby variables


【解决方案1】:

您可以使用 eval 使其工作:

eval "#{name}[0] = 1"

我强烈建议不要这样做。在您认为需要执行类似操作的大多数情况下,您可能应该使用哈希图。喜欢:

context = { "video" => [] }
name = "video"
context[name][0] = 1

【讨论】:

  • @sepp2k:你为什么强烈反对使用 eval?
  • @Radek:3000 年的腮腺炎等破碎系统经验;这是一种典型的代码异味,它会使您的代码难以理解和维护。
  • @Radek:一方面,如果您评估用户输入,这是一个主要的安全漏洞。对于另一个哈希图更适合从变量名映射到值。另一方面,使用 eval 的代码调试起来很麻烦。
【解决方案2】:

这里是 eval 函数。

video = [] #there is now a video called array
name = "video" #there is now a string called name that evaluates to "video" 
puts eval(name) #prints the empty array video
name[0] = 1 #changes the first char to value 1 (only in 1.8.7, not valid in 1.9.1)

这里是eval() doc

【讨论】:

    【解决方案3】:

    在您查看eval 建议之前,请阅读以下内容:

    (是的,这些都是关于 Perl 的具体内容。我认为,不管是哪种语言,更重要的一点都是如此。)

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-30
      相关资源
      最近更新 更多