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

Saving key string in a hash using a method

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

我的 YAML 名称 config.yaml:

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

我有一个classmachine_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

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

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

我想最后我也在尝试找出在方法中迭代和 return 值的最佳实践是什么,或者帮助更好地理解使用方法和 returning使用方法的值。

each 方法 returns 调用它的原始可枚举对象,这就是为什么在调用 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']