我不完全确定Ruby是否可行,但希望有一种简单的方法可以做到这一点.我想声明一个变量,然后找出变量的名称.也就是说,对于这个简单的片段:
foo = ["goo", "baz"]
如何获取数组的名称(此处为"foo")?如果它确实可能,这是否适用于任何变量(例如,标量,散列等)?
编辑:这是我基本上要做的事情.我正在编写一个包含三个重要变量的类的SOAP服务器,验证代码基本上是这样的:
[foo, goo, bar].each { |param| if param.class != Array puts "param_name wasn't an Array. It was a/an #{param.class}" return "Error: param_name wasn't an Array" end }
我的问题是:我可以用foo,goo或bar替换'param_name'的实例吗?这些对象都是数组,所以到目前为止我收到的答案似乎不起作用(除了重新设计整个事情ala dbr的答案)
如果你扭转了问题怎么办?而不是尝试从变量中获取名称,从名称中获取变量:
["foo", "goo", "bar"].each { |param_name| param = eval(param_name) if param.class != Array puts "#{param_name} wasn't an Array. It was a/an #{param.class}" return "Error: #{param_name} wasn't an Array" end }
如果有可能根本没有定义变量(而不是数组),你可能想在"param = ..."行的末尾添加"rescue nil"来保持eval从抛出异常......
您需要重新构建解决方案.即使你能做到(你做不到),问题根本就没有合理的答案.
想象一下get_name方法.
a = 1 get_name(a)
每个人都可能同意这应该返回'a'
b = a get_name(b)
它应该返回'b','a'还是包含两者的数组?
[b,a].each do |arg| get_name(arg) end
它应该返回'arg','b'还是'a'?
def do_stuff( arg ) get_name(arg) do do_stuff(b)
它应该返回'arg','b'或'a',还是所有这些的数组?即使它确实返回了一个数组,顺序是什么,我怎么知道如何解释结果呢?
上述所有问题的答案是"这取决于我当时想要的特定事物." 我不确定如何解决Ruby的问题.
看来你正试图解决一个容易解决的问题.
为什么不将数据存储在哈希中?如果你这样做..
data_container = {'foo' => ['goo', 'baz']}
获得'foo'这个名字真是微不足道.
也就是说,你没有给出任何问题的背景,所以可能有理由你不能这样做..
[编辑]澄清后,我看到了问题,但我认为这不是问题.. [foo,bar,bla],就像说的那样['content 1', 'content 2', 'etc']
.实际变量名称(或者更确切地说,应该是)完全不相关.如果变量的名称很重要,那么这就是为什么存在哈希的原因.
问题不在于迭代[foo,bar]等,这是SOAP服务器如何撤回数据的根本问题,和/或您尝试使用它的方式.
我想说,解决方案是让SOAP服务器返回哈希值,或者,因为你知道总会有三个元素,你能不能做类似的事情.
{"foo" => foo, "goo" => goo, "bar"=>bar}.each do |param_name, param| if param.class != Array puts "#{param_name} wasn't an Array. It was a/an #{param.class}" puts "Error: #{param_name} wasn't an Array" end end
好的,它也可以在实例方法中工作,并且,根据您的特定要求(您在评论中添加的要求),您可以这样做:
local_variables.each do |var| puts var if (eval(var).class != Fixnum) end
只需替换Fixnum
您的特定类型检查.