2012-06-19 22 views
0

我有一些問題。我有很多帶鑰匙和鑰匙的琴絃,鑰匙總是一樣的。字符串看起來像「key1 = value1; key2 = value2 ...」。所以我做了全球哈希與數組作爲值,並希望從字符串中的所有數據存儲到散列所以我做了功能:如何在方法中添加全局哈希值? RoR

<% 
$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 
%> 

,但它似乎沒有工作,是錯誤的東西在我的代碼? (注意:我只能在Rails代碼使用Ruby)

+0

定義「不起作用」。如果你期望它做某件事,你永遠不會*調用*'add_hash'。不確定初始hash init的作用是什麼,你可以在'Hash'構造函數中設置一個默認的散列值。不知道爲什麼這是看起來是ERB模板的原因。 –

+0

是的,這個問題很糟糕。你能給出一個所有變量的預期輸入和輸出的例子嗎?我不明白'$ authors'是由什麼組成的。另外,請注意,變量沒有用$ sign in ruby​​命名。你也可以使用'array.each_with_index {| value,index | #你的代碼}'。 –

回答

1

只是爲了LOLZ)),

說明的原因:我可以在洛洛on Rails的代碼只使用Ruby

地方它.RB在任何地方呼叫all =Lolo.instance訪問哈希Rails應用程序

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.add("key1=value1;key2=value2")添加元素,all.keys是AU雷神列表

,不要使用全局變量的原因可能會導致很多問題

0

使用全局變量是不好的做法。如果你想使用,仍然沒有問題。

在您的代碼中,不允許使用鍵作爲字符串訪問哈希變量。因此,使用to_sym將密鑰更改爲符號

 (ie) $all[$authors[len].to_sym] similarly $all[$authors[j].to_sym] 

這可能有效。

+0

它工作嗎? – codeit