Загрузка или запись настроек при запуске программы - PullRequest
0 голосов
/ 06 ноября 2018

Данные генерируются следующим образом:

def checkConfigurationsFile
    if File.exist?("./prefs/settings.conf") == true
      configFile = File.read("./prefs/settings.conf")
      options = JSON.parse(configFile)
      configData = {:multithreading => options['multithreading'],
                    :systemCores => options['systemCores']}
      mainmenu()

      elsif File.exist?("./prefs/settings.conf") == false
        configData = {:multithreading => false,
                      :systemCores => 1}

        configFile = File.open("./prefs/settings.conf","w")
        configFile.write(JSON.pretty_generate(configData))
        configFile.close
        checkConfigurationsFile()
      else
        puts "Something went terribly wrong!"
    end
end

Это меню настроек:

    def openPreferences
    puts <<-PREFERENCES
        ####################################################
        #|                                                |#
        #|  Preferences                                   |#
        #|  ------------------                            |#
        #|   1. Using Multithreading? (Currently #{configData[multithreading]})                                             |#
        #|  2. Adjust Multithreading (Currently #{configData[systemCores]} are used)|#
        #|                                                |#
        ####################################################
    PREFERENCES
      print "Enter a number to change settings: "
      choice = gets.i 

      if blablabla
      ...

Если пользователь решает изменить свои конфигурации, он должен уметь это делать. Но похоже, что я не смог использовать данные, сгенерированные в методе checkConfigurationsFile, потому что они являются частными (и нет смысла передавать их через аргументы по всей программе).

Выдает это сообщение об ошибке:

Traceback (most recent call last):
        3: from dbaser.rb:214:in `<main>'
        2: from dbaser.rb:10:in `checkConfigurationsFile'
        1: from dbaser.rb:54:in `mainmenu'
dbaser.rb:205:in `openPreferences': undefined local variable or method `configData' for main:Object (NameError)

1 Ответ

0 голосов
/ 06 ноября 2018

Если вы не хотите передавать конфиги везде, тогда вам нужно сделать их глобальными. Есть несколько способов сделать это.

Например, просто замените все configData на $configData. Бум, это сделано. Но это может быть осуждено.

Или, более "профессиональный" подход - использовать какой-то глобальный объект конфигурации singleton.

Примерно так:

class ConfigData
  class << self
    attr_accessor :multi_threading, :system_cores
  end
end

Тогда

# write at startup
ConfigData.system_cores = options['systemCores']

# read in another place
ConfigData.system_cores
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...