def start_game
game = true
loop do
print "number of chances remaining: #{@chances} \n"
print "#{@dash.join('')} \n"
puts "type your letters to play(or type 'save' to save the game at any point)"
check_letter = gets.chomp.downcase
if check_letter == 'save'
save_file
elsif @secret_word.include?(check_letter)
array_of_guess_word = @secret_word.split('')
arr2 = array_of_guess_word.each_index.select {|x| array_of_guess_word[x] == check_letter}
arr2.each do |idx|
@dash[idx] = check_letter
end
else
@guessed_letter << check_letter
end
print "Letters not inlcuded: #{@guessed_letter} \n\n"
print "Yes! the word was: #{@secret_word} \n You won congratulations #{@name}" if @dash.eql?(array_of_guess_word)
break if @dash.eql?(array_of_guess_word)|| @chances == 0
@chances -= 1
end
end
def load_file
if !Dir.exist?('./saved_games/')
loop do
puts '\nNo saved games!'
break if user_input == '1'
end
else
loaded_game =
File.open("./saved_games/#{load_file_name}.yml", 'r') do |file|
YAML.load(file)
end
loaded_game.start_game
end
end
def load_file_name
saved_games = Dir.glob('saved_games/*').map {|game| game.split('/').last.split('.yml').first}
file_count = saved_games.count
loop do
puts "Enter a number to load the game: "
saved_games.each_with_index {|game , idx| puts "#{idx + 1} , #{game}"}
file_number = gets.chomp.strip
if /\A[0-9]+\Z/.match?(file_number) && file_number.to_i <= file_count
return saved_games[file_number.to_i - 1]
end
puts "\nInvalid input.\n\n"
end
end
当我试图加载文件时,我得到这个错误,说psych::DisallowedClass。我就是不能把我的yaml代码
我想知道我到底哪里做错了。我想这是因为我在代码中使用的示例变量。我是序列化新手
1条答案
按热度按时间hmtdttj41#
默认情况下,出于安全原因,Psych(Ruby用来处理YAML的库)只允许有限的类列表(
TrueClass
、FalseClass
、NilClass
、Integer
、Float
、String
、Array
和Hash
)被解析。当你想允许其他类(比如你的例子中的自定义
Hangman
类)从你的YAML文件中被格式化时,你必须显式地允许这些类:我建议像这样修改
load_file
方法: