Chinaunix

标题: Ruby中有没有办法可以用变量动态代表数组名呢? [打印本页]

作者: alinunix    时间: 2013-10-11 18:00
标题: Ruby中有没有办法可以用变量动态代表数组名呢?
本帖最后由 alinunix 于 2013-10-11 18:18 编辑

  1 #!/usr/bin/env ruby
  2 tool_features  = ['f1', 'f2']
  3
  4 names = ["a", "tool", "b"]
  5
  6 names.each do |x|
  7       tmp_new = "#{x}_features"
  8       if tmp_new.empty?
  9            puts "no"
10       else
11           puts "yes, tool_features arrary defined!\n"
12           puts tmp_new
13       end
14 end

输出:
yes, tool_features arrary defined!
a_features
yes, tool_features arrary defined!
tool_features
yes, tool_features arrary defined!
b_features

我的本意是用变量来代表数组名来判断一个数组是否存在,希望12行打印出数组tool_features的内容f1f2
但显然蓝色部分(第8行)最终判断的是字符串名是否存在,第12行实际上输出的只是字符串的内容,而不是同名的数组的内容
有没有办法可以用变量动态代表数组名呢?

*******************************************************
或者换个问法:

  1 #!/usr/bin/env ruby
  2 tool_features  = ['f1', 'f2']
  3 a = "tool_features"
  4
  5 puts "#{a}"



输出:
tool_features

我的本意是用变量来代表数组名,希望5行打印出数组tool_features的内容f1f2
但显然蓝色部分(第5行)最终输出的只是字符串a的内容,而不是a中存的字符串代表的同名数组的内容
有没有办法可以用变量动态代表数组名呢?




作者: bikong0411    时间: 2013-10-12 09:26
或许你可以这样

#!/usr/bin/env ruby
tool_features  = ['f1', 'f2']
names = ["a", "tool", "b"]
names.each do |x|
    begin
        tmp_new = eval("#{x}_features")
    rescue
        tmp_new = []
    end
    if tmp_new.empty?
       puts "no"
    else
        puts "yes, tool_features arrary defined!\n"
        puts tmp_new
   end
end
作者: alinunix    时间: 2013-10-13 22:06
bikong0411 发表于 2013-10-12 09:26
或许你可以这样

#!/usr/bin/env ruby


可以了,正是我想要的效果,学习了,谢谢bikong0411兄。
作者: Sevk    时间: 2013-10-15 19:28
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2