【发布时间】:2012-06-23 22:22:21
【问题描述】:
有没有办法获取 Ruby 哈希,例如:
myhash = {a: 12, b:24, c:36}
并将其转换为一组局部变量(显然,没有手动进行赋值)?结果应该就像我执行了语句一样:
a = 12
b = 24
c = 36
同样,我可以使用一组已定义的局部变量并生成一个哈希,其中键是变量名,值是变量值(同样,没有字面写出哈希)?我以前从未见过这样的事情,所以我猜答案是否定的,但它会很好......
【问题讨论】:
-
无论您尝试做什么,几乎肯定有更好的方法。您能否提供更多信息,以便我们提出不同的解决方案?
-
@JoshuaCheek 我发现自己相当频繁地将中等大小的散列作为参数传递。必须一直通过哈希语法访问存储在这些哈希中的值既麻烦又臃肿——我想我可以在我的方法中“解包”(或提取)哈希,做我打算做的任何操作,然后在退货时重新包装。
-
我怀疑答案是拥抱 OO。如果哈希是选项,请将它们拉出并设置在 ivars 上。如果您实际上是在操作它们,那么很有可能您应该使用对象而不是哈希(而不是在哈希中保存数据,而是对象保存它。而不是操作哈希的数据,您告诉对象操作它自己的数据)。不看更多代码很难给出更好的建议。
-
这对我有用(但它很老套): myhash = {a: 12, b: 24, c: 36} myhash.each do |k, v| Kernel.send(:define_method, k, Proc.new {v}) end
-
如果您不想通过散列访问方法参数,那么也许您一开始就不应该将它们作为散列传递?