数据是通过以下方式生成的:
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)
答案 0 :(得分:0)
如果您不想在任何地方传递配置,则需要使其全局。有几种方法可以做到这一点。
例如,只需将所有configData
替换为$configData
。繁荣,完成了。但这可能会让人皱眉。
或者,更“专业”的方法是使用某种全局单例配置对象。
类似这样的东西:
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