使用方法将密钥字符串保存在哈希中

时间:2015-09-01 16:46:01

标签: ruby methods yaml each

我正在利用yaml创建配置文件以自动创建机器设置文件。我有一些基本的ruby脚本编写经验,但希望开始更多地使用类来使事情变得更清洁并且在编程方面变得更好。

我的YAML命名为config.yaml:

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

我有一个类machine_builder.rb

`require'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

此尝试只返回一个值,我假设这是因为一旦找到一个值,return就会退出循环。

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

我想最后我还想弄清楚迭代和返回方法中的值的最佳做法是什么,或者有助于更好地理解使用方法和使用方法返回值。

1 个答案:

答案 0 :(得分: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']