2012-09-10 69 views
1

我有一個簡單的要求分配多個數組。現在我正在做類似的事情。分配數組到不同的變量

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都應該在一行 被分配到Array.new請提出一些更好的和乾淨的做這件事的方式。也許通過元編程。

+3

開始一個方法設置8個變量爲一個空值看起來像一個(命令式)時間的地獄開始 – tokland

回答

2

醜,但滿足的要求:

employees, projects, practices, entities, categories, groups, external_inputs, payrolls = Array.new(8) { [] } 
+0

謝謝我正在尋找相同的東西。 – AnkitG

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"=>[]} 
2
employees, projects, practices, entities, categories, groups, external_inputs, payrolls = 
    8.times.map { [] } 
2

我想要那個employeesprojectspracticesentities,...,payrolls都應該在單行

分配給 Array.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 

Voilà,單線,就像你的要求。

現在,爲什麼你有這麼大的,複雜的方法,它需要8個局部變量是另一個問題。