我为业余问题道歉,我还在学习。我正在尝试从Ruby中的YAML文件中提取信息。我认为,因为我已经将信息推送到数组,所以我只需要打印数组。我知道情况并非如此,但是当我查看时,我在文档中找不到任何内容。
require "yaml"
class BankAccount
attr_accessor :first_name, :last_name, :address, :your_account
def initialize
@your_account = []
open()
end
def open
if File.exist?("accountinfo.yml")
@your_account = YAML.load_file("accountinfo.yml")
end
end
def save
File.open("accountinfo.yml", "r+") do |file|
file.write(your_account.to_yaml)
end
end
def new_account(first_name, last_name, address)
puts "Enter your first name:"
first_name = gets.chomp
puts "Enter your last name"
last_name = gets.chomp
puts "Enter your address:"
address = gets.chomp
end
def account_review(your_account)
puts @your_acccount
end
def run
loop do
puts "Welcome to the bank."
puts "1. Create New Account"
puts "2. Review Your Account Information"
puts "3. Check Your Balance"
puts "4. Exit"
puts "Enter your choice:"
input = gets.chomp
case input
when '1'
new_account(first_name, last_name, address)
when '2'
account_review(your_account)
when '4'
save()
break
end
end
end
end
bank_account = BankAccount.new
bank_account.run
答案 0 :(得分:2)
当我面对这样的事情时,我发现最简单的方法是使用irb
查看YAML文件加载后的样子。有时它可能会与您期望的格式略有不同。
在同一目录中,在命令行上运行irb
。
然后,您可以使用交互式Ruby控制台来运行命令。
require 'pp'
- 这有助于您更轻松地查看输出。
然后:
your_account = YAML.load_file("accountinfo.yml")
pp your_account
在上面的代码中,似乎在你的new_account方法中,你实际上没有在@your_account上设置这些属性,而在save方法中你将未定义的变量写入yaml。
保存应该是:
file.write(@your_account.to_yaml)
新帐户应以:
结束@your_account[:first_name] = first_name
@your_account[:last_name] = last_name
@your_account[:address] = address
答案 1 :(得分:1)
你永远不会实际设置你的变量。使用self.
作为setter的前缀,否则您只需创建一个具有相同名称的局部变量。此外,您根本不设置your_acccount
:
def new_account
puts "Enter your first name:"
self.first_name = gets.chomp
puts "Enter your last name"
self.last_name = gets.chomp
puts "Enter your address:"
self.address = gets.chomp
self.your_account = [first_name, last_name, address]
end
另一个问题是您的代码永远不会调用open
。这意味着一切正常,直到您结束程序并重新启动它。在致电open
以解决此问题之前,请致电account_review
。
答案 2 :(得分:0)
如果你正在使用Rails,这里有一个简单的方法来阅读YAML文件(标题所说的)
# Load the whatever_config from whatever.yml
whatever_config = YAML.load(ERB.new(File.read(Rails.root.join("config/whatever.yml"))).result)[Rails.env]
# Extract the foo variable out
foo = whatever_config['foo']
我认为我真的不明白你的问题究竟是什么?