2016-12-19 3 views
0

Я пытаюсь сделать текстовую игру с использованием рубина, чтобы изучить язык, я хочу, чтобы ошибка была ошибкой, если игрок вводит строку неправильно, она должна попросить их запустить процесс создания персонажа снова.Как создать новую структуру при возникновении ошибки

Моя проблема заключается в том, что при повторном вызове функции для создания символа она создает новую структуру и сохраняет старую. Поэтому в конце у меня есть что-то, что печатает новую исправленную структуру, а также старую неправильную структуру. Я, очевидно, хочу только сохранить правильный, так как я могу избавиться от старого?

Character = Struct.new(:name,:race,:alignment,:str,:dex,:int,:const,:char,:wis) 
def makeChar() 
    newChar = Character.new() 
    until i == 6 do 
     case skillArray[i] 
     when "str" 
      newChar.str = rolledStats[i] 
     when "int" 
      newChar.int = rolledStats[i] 
     when "dex" 
      newChar.dex = rolledStats[i] 
     when "wis" 
      newChar.wis = rolledStats[i] 
     when "const" 
      newChar.const = rolledStats[i] 
     when "char" 
      newChar.char = rolledStats[i] 
     else 
      puts("It appears you have entered an invalid value for a skill") 
      puts("Please try again but enter only the following: str, dex, int, char, wis, const") 
      makeChar() 
     end 
     i += 1 
    end 
    puts("Our brave adventurer's name is #{name} the #{race}") 
     puts("#{name}'s stats are as follows:\n Str: #{newChar.str} \n Dex: #{newChar.dex} 
      Const: #{newChar.const} \n Int: #{newChar.int} \n Wis: #{newChar.wis} \n Char: #{newChar.char}") 
     print("#{name} prepare for your quest!") 
+2

Привет и добро пожаловать в переполнение стека. Не могли бы вы изменить свой вопрос, чтобы включить свой код? – Schwern

+0

Я добавил код :) – miykael

ответ

0

Бывают случаи, когда вам нужно «избавиться от» переменных, но это не похоже на одно.

Посмотрите этот пример:

word = "test" 
def guess_word 
    guess = gets.chomp 
    exit if word == guess 
end 
loop do 
    puts "guess word" 
    guess_word 
end 

Эта программа работает на петле. Каждая итерация подсказывает пользователю слово. Если слово верное, оно завершается. Вы можете видеть в guess_word, что переменная guess назначается каждый раз при вызове метода.

Если у вас есть метод, который определяет переменную, масштаб этой переменной является только в этом методеесли не существует переменная с тем же именем в более высоком объеме.