如何在方法中添加全局哈希值?回报率

时间:2012-06-19 10:54:06

标签: ruby-on-rails ruby

我有一些问题。我有很多钥匙和他们的随身物品的钥匙,钥匙总是一样的。字符串看起来像“key1 = value1; key2 = value2 ...”。所以我用数组作为值创建了全局Hash,并且想要将字符串中的所有数据存储到该哈希中,所以我创建了函数:

<%
$all={}
for len in (0..$authors.length-1)
   $all[$authors[len]] = Array.new   #authors are defined and filled earlier
end

def add_hash(from)
   the_from = from.to_s.split(";")
   for one in the_from
      splitted = one.split("=")
      for j in (0..$authors.length.to_i-1)
         if($authors[j] == splitted[0])
            $all[$authors[j]] << splitted[1]
         end
      end
   end
end
%>

但它似乎不起作用,我的代码有问题吗? (注意:我只能使用Ruby on Rails代码)

2 个答案:

答案 0 :(得分:1)

仅为lolz)),

的原因
  

注意:我只能使用Ruby on Rails代码

将它放在rails app的初始化文件夹中的lolo.rb中

require 'singleton'

class Lolo < Hash
  include Singleton

  def initialize
    super([])
  end

  def add src
    src.to_s.split(";").each do |item|
      splitted = item.split("=")
      self[splitted[0]] = splitted[1]
    end
  end
end

在任何地方调用all =Lolo.instance来访问哈希,all.add("key1=value1;key2=value2")添加元素,all.keys是作者列表

并且不使用全局变量导致它可能导致很多问题

答案 1 :(得分:0)

使用全局变量是一种不好的做法。如果你想使用仍然没有问题。

在您的代码中,不允许使用key作为字符串访问哈希变量。因此,使用to_sym

将键更改为符号
      (ie) $all[$authors[len].to_sym] similarly $all[$authors[j].to_sym]

这可能有效。