2

複数の配列を割り当てるという単純な要件があります。今、私は何かをやっています。

   employees = Array.new
      projects = Array.new
      practices = Array.new
      entities = Array.new
      categories = Array.new
      groups = Array.new
      external_inputs = Array.new
      payrolls = Array.new

employees, projects, practices, entities ...payrollsすべてを 1 行で割り当てたいのですがArray.new、それを行うためのより良いクリーンな方法を提案してください。メタプログラミングによるものかもしれません。

4

4 に答える 4

3

、、、、…、employeesすべてを 1 行で割り当てる必要がprojectsありますpracticesentitiespayrollsArray.new

どうぞ:

employees = Array.new; projects = Array.new; practices = Array.new; entities = Array.new; categories = Array.new; groups = Array.new; external_inputs = Array.new; payrolls = Array.new

ほら、あなたが要求したとおり、1行です。

さて、8 つのローカル変数が必要なほど大規模で複雑なメソッドを作成した理由は、まったく別の問題です。

于 2012-09-10T11:34:19.463 に答える
3
employees, projects, practices, entities, categories, groups, external_inputs, payrolls = 
  8.times.map { [] }
于 2012-09-10T11:06:53.960 に答える
2

醜いが要件を満たす:

employees, projects, practices, entities, categories, groups, external_inputs, payrolls = Array.new(8) { [] }
于 2012-09-10T11:07:39.437 に答える
1

まあ、それは 1 行ではありませんが、使用するのがずっときれいです:

employees        = []
projects         = []
practices        = []
entities         = []
categories       = []
groups           = []
external_inputs  = []
payrolls         = []

しかし、もっと「賢く」やりたい場合は、次のことを試すことができます。

employees = projects = practices = entities = categories = groups = external_inputs = payrolls = nil
%w(employees projects practices entities categories groups external_inputs payrolls).each {|v| eval "#{v} = []" }

とはいえ、値をハッシュに収集する方がおそらく簡単です。

Hash[*%w(employees projects practices entities categories groups external_inputs payrolls).map {|k| [k, []] }.flatten(1)]

# Result
# {"employees"=>[], "projects"=>[], "practices"=>[], "entities"=>[], "categories"=>[], "groups"=>[], "external_inputs"=>[], "payrolls"=>[]}
于 2012-09-10T11:02:17.630 に答える