0

問題があります。キーとその持ち物を含む多くの文字列があり、キーは常に同じです。文字列は "key1=value1;key2=value2..." のようになります。そこで、配列を値としてグローバル ハッシュを作成し、文字列からのすべてのデータをそのハッシュに格納したいので、関数を作成しました。

<%
$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 コードしか使用できません)

4

2 に答える 2

1

ちょうどlolz))、原因

注: Ruby on Rails コードしか使用できません

Rails アプリの初期化フォルダ内の 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は、作成者リストです

グローバル変数を使用しないでください。多くの問題が発生する可能性があります

于 2012-06-19T11:28:17.330 に答える
0

グローバル変数を使用することは悪い習慣です。それでも使いたいなら問題ありません。

コードでは、キーを文字列として使用してハッシュ変数にアクセスすることは許可されていません。したがって、 to_sym を使用してキーをシンボルに変更します

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

これはうまくいくかもしれません。

于 2012-06-19T11:29:13.343 に答える