Ruby 程序不保存哈希更改
Posted
技术标签:
【中文标题】Ruby 程序不保存哈希更改【英文标题】:Ruby program doesn't save hash changes 【发布时间】:2014-04-08 06:25:23 【问题描述】:我的源代码:
books =
Harry_Potter: 5,
Steve_Jobs: 10
def finder(bookName)
books.each
|n| if n == bookName
puts "Are you sure you want to #choice #n?"
confirmAction = gets.chomp
if confirmAction == "yes"
case choice
when "update"
puts "Enter the new name:"
newName = gets.chomp.to_sym
books[newName.to_sym] = books.delete(n)
puts "Update the rating for #newName:"
newRating = gets.chomp.to_i
books[newName.to_sym] = newRating.to_i
puts "Successfully updated #newName with rating of #newRating"
when "delete"
books.delete(n)
else puts "Invalid option!"
end
else puts "Invalid book name."
end
end
end
puts "What would you like to do?\n[Add] [Update] [Delete] [View]"
action = gets.chomp.capitalize
case action
when "Add"
puts "Enter the new book name:"
title = gets.chomp.to_sym
puts "Please rate the book [1-10]:"
rating = gets.chomp.to_i
books[title.to_sym] = rating.to_i
puts "Successfully added #title with rating of #rating"
puts books
when "Update"
choice = "update"
puts "Enter the name of the book:"
bookName = gets.chomp.to_sym
finder(bookName)
when "Delete"
choice = "delete"
puts "Enter the name of the book:"
bookName = gets.chomp.to_sym
finder(bookName)
when "View"
choice = "view"
puts books.each
|k, v| puts "#k: #v"
end
每当我使用 add 选项并添加一些东西时,它都会起作用。但是一旦我退出并重新打开程序,它就不会显示我使用 add 选项添加的书籍,它会返回到默认列表。 我需要 Ruby 永久保存所有更改。
【问题讨论】:
旁注,Ruby 的惯例是使用 2 空格而不是 4 空格缩进。 永久?然后你应该有一个像数据库或文件输出这样的存储。 我没有看到任何内容被写入文件。这是您保存更改的唯一方法。 @Cupcake 谢谢! :) @Santosh 我以为 Ruby 会在文件中写入列表,但无论如何感谢您清除我的疑问。 【参考方案1】:您必须自己保存对象,例如使用YAML
:
require 'yaml'
File.write('data.yml', YAML.dump(books))
“data.yml”的内容是:
---
:Harry_Potter: 5
:Steve_Jobs: 10
要读取文件,请使用:
books = YAML.load(File.read('data.yml'))
#=> :Harry_Potter=>5, :Steve_Jobs=>10
【讨论】:
【参考方案2】:好吧,您可以使用Maglev,它是一个基于GemStone/S Object Server 的ruby 解释器,它将能够持久地存储您的书籍(通过设置对您的books
Hash 和Maglev.commit_transaction
的引用)。但是,对于您的目的而言,这可能有点矫枉过正:-)
【讨论】:
以上是关于Ruby 程序不保存哈希更改的主要内容,如果未能解决你的问题,请参考以下文章