Итак, я очень новичок в Ruby, и я пытаюсь узнать больше, преобразовывая скрипт python, над которым я работаю в Ruby. Однако я столкнулся с очень неприятной проблемой. Каждый раз, когда я пытаюсь запустить следующий код, я получаю эту ошибку:ArgumentError `initialize ': неправильное количество аргументов (8 для 0)
player.rb:81:in
initialize': wrong number of arguments(8 for 0) (ArgumentError) from player.rb:81:in
new' from player.rb:81:in `'
Я уверен, что есть 8 аргументов в методе инициализации, и я проверил орфографию во много раз. Я не могу понять, почему интерпретатор не считает, что конструктор не имеет никаких аргументов. Может ли кто-нибудь сообщить мне, что происходит неправильно ниже?
class Player
def determineLevel
@xp_req4lvl = [0, 1000, 2250, 3750, 5500, 7500, 10000, 13000, 16500, 20500, 26000, 32000, 39000,47000,57000,69000,83000,99000,119000,143000,175000,210000,255000,310000,375000,450000,550000,675000,825000,1000000]
if xp <= 1000 then
@level = 1
return
end
i=0
while i < xp_req4lvl.length do
if xp > xp_req4lvl[i] then
i+=1
elsif xp == xp_req4lvl[i] then
@level = i+1
return
else
@level = i
return
end
ml = xp_req4lvl.length
raise LevelingError.new(ml), "Level too high!", caller
return
end
def initialize(personalInfo, training, race, chclass, feats, stuff, abilities, xp)
@str, @con, @dex, @int, @wis, @cha = abilities
@trainedSkills = training
@characterClass = chclass
@feats = feats
@race = race
#for featx in self.race["racialFeats"]:
# self.feats.append(featx)
@equipment = stuff
@background = personalInfo
@xp =xp
@actionPoints = 1
@equippedArmor = nil
@equippedShield = nil
@armorProficiencies = []
@shieldProficiencies = []
@untrainedArmorEquipped = false
@untrainedShieldEquipped = false
@level = 0
self.determineLevel
rescue LevelingError => e
puts "Character is over maximum level of " + e.get_max_lvl.to_s
@level = 30
end
#self.calculateAbilityScores
#self.calculateAbilityMods
#self.calculateHP
#self.determineProficiencies
#@fortitudeSave = 10+(@level/2)
#@reflexSave = 10+(@level/2)
#@willSave = 10+(@level/2)
#puts @level.to_s
@healingSurgesUsed = 0
end
public
def get_level
return @level
end
end
class LevelingError < RuntimeError
attr :maxLvl
def initialize(ml)
@maxLvl = ml
end
def get_max_lvl()
return @maxLvl
end
end
if __FILE__ == $0
j = Player.new("0", "1", "2", "3", "4", "5", "[10,10,10,10,10,10]", "1250")
puts j.get_level.to_s
end
Попробуйте, что я сказал .. он пропустил конец 'while', поэтому метод' # initialize' перешел в цикл while. Если вы поместите один «конец», вы не получите ошибку аргумента. попробуйте сначала, затем дайте правильный ответ. –
ОК, мой плохой, один для вас. На самом деле я не получил вашего ответа, теперь я это делаю. –
@BeatRichartz спасибо за то, что подошел ... :) Я попробовал код, а затем ответил ... Но кредит принадлежит моему редактору, который четко обозначил точку ошибки, когда я нажал 'ctrl + X' .. :) –