小さなテキスト ベースのゲームを作成しています。ゲームを保存して、後でデータをロードしたいと考えています。ゲームに、すべての変数とその値を次のような形式で保存するテキスト ファイルを作成させることができました。
first_name = "Name"
last_name = "Last Name"
bank = 10000
...
ロードを選択すると、テキストが読み取られ、適切な変数が割り当てられるようになります。これはできますか?
他の回答で提案されているように、ファイルの評価や解析などのメタプログラミング手法を使用しない限り、ローカル変数でそれを行うことはできません。メタプログラミングのハックなしでそれを行いたい場合は、他のタイプの変数または定数を使用する必要があります。設定用にモジュール (特別なタイプの定数) を準備すると役立つ場合があります。
メインファイルで:
module Setting
def self.set h; @h = h end
def self.call @h end
end
load(path_to_setting_file)
設定ファイル:
Setting.set(
first_name: "Name",
last_name: "Last Name",
bank: 10000,
)
メインファイルから呼び出すには:
Setting.call
# => {
first_name: "Name",
last_name: "Last Name",
bank: 10000,
}
それが気に入らない場合は、YAML を使用する必要があります。
最も速くて簡単な方法は、Marshalを使用することです。
# Save data
data = Marshal.dump(game_state)
# Load data
game_state = Marshal.load(data)
ゲーム データ スキーマが変化し続けることが予想される場合は、インスタンス変数を使用する代わりに、データをハッシュまたはHashie::Mashに保存することを検討してください。
だいたい:
variable_file = File.open("./myfile.txt")
variable_file.each do |variable_line|
variable_line.chomp!
#split on " = "
#gsub out the quotes
#add to hash where name is key and value is value
end
#your program uses the hash to access the values