2015-09-01 94 views
0

我利用yaml創建配置文件來自動創建機器設置文件。我有一些基本的ruby腳本編程經驗,但希望開始更多地利用類來讓事情變得更清潔,並且在編程時更好。使用方法將密鑰字符串保存在哈希中

我YAML名config.yaml:

`machine_configurations: 
    MACHINE_NAME_1: 
    Settings: 
    MACHINE_NAME_2: 
    Settings:` 

我有一個類machine_builder.rb

'需要 'YAML'

class MachineBuilder 
    def initialize 
    @config = YAML.load_file("config.yaml") 
    end 

    def machine_list 
    @config['machine_configurations'].each do |k,v| 
     k 
    end 
    end 
end 

我試圖找出如何要做的是存儲一組機器配置字符串

我已經測試嘗試使用

test = MachineBuilder.new 
machine_list = [] 
machine_list << test.machine_list 

我想要得到的結果是

machine_list = ['MACHINE_NAME_1','MACHINE_NAME_2']  

,但我不斷收到數組中存儲的整個哈希鍵和值。

machine_list = ['MACHINE_NAME_1 => Settings: ...',' MACHINE_NAME_2 => Settings...'] 

我試着改變使用以下方法,但我想我失去了一些東西。

def machine_list 
    @config['machine_configurations'].each do |k,v| 
     return k 
    end 
end 

這一嘗試只返回一個值,我假設,這是因爲一旦一個價值發現的回報退出循環。

def machine_list 
    @config['machine_configurations'].each do |k,v| 
     puts k 
    end 
end 

我想到底我也想弄清楚什麼是最好的做法,迭代和方法返回值或有助於更好地瞭解使用方法和使用方法的返回值。

回答

2

每個方法都會返回它被調用的原始可枚舉對象,這就是爲什麼當你調用machine_list方法時你總是得到整個哈希值。 你可以試試下面的代碼來獲取@config哈希鍵的數組:

def machine_list 
    @config['machine_configurations'].keys 
end 

然後:

test = MachineBuilder.new 
machine_list = test.machine_list 

這樣的結果將是:

machine_list = ['MACHINE_NAME_1','MACHINE_NAME_2'] 
+0

所以簡單;-)謝謝! – zigloo99