我有一个"攻击"由于某种原因返回ArgumentError: wrong number of arguments (0 for 1)
的方法,即使我提供了一个参数。调用是a.attack(b),其中a和b都是UnitInstance类的实例
这是我的班级,攻击方法也很好 - 任何建议都非常感谢!
编辑:此外,这是rails应用程序中的模型,但它不需要与数据库连接
class UnitInstance
attr_accessor :name, :health, :current_health, :attack, :defence,
:initiative, :amount, :conditions
def initialize(unit_id, amount)
unit = Unit.find(unit_id)
@name = unit.name
@health = unit.health
@current_health = unit.health
@attack = unit.attack
@defence = unit.defence
@initiative = unit.initiative
@amount = amount
@conditions = []
end
def strength
amount * attack
end
def dead?
health <= 0 and amount <= 0
end
def find_target(enemies)
end
def decrease_health(_amount)
hp = health * (self.amount - 1) + current_health
hp -= _amount
self.amount = hp / health + 1
if hp % health == 0
self.amount -= 1
self.current_health = 5
else
self.current_health = hp % health
end
end
def attack(target)
target.decrease_health(strength)
decrease_health(target.defence) unless target.dead?
"#{name.titleize} attacked #{target.name.titleize} for #{attack} damage,"
end
end
答案 0 :(得分:2)
您有一个名为attack
的方法,其中一个参数由a.attack(b)
def attack(target)
target.decrease_health(strength) ## <<-- Notice this
decrease_health(target.defence) unless target.dead?
"#{name.titleize} attacked #{target.name.titleize} for #{attack} damage,"
end
您正在strength
内attack
strength
方法
def strength
amount * attack ## << -- No arguments here
end
您在strength
方法中收到错误,而您正在调用attack
而没有任何参数。
@amount
和@attack
是实例变量,您已使用attr_accessor
为其定义了getter和setter方法。
因此,对于@attack
,您现在有两种方法attack
和attack=
。
请记住
Ruby类中可能只有一个具有给定名称的方法。如果好几个 在类中定义的具有相同名称的方法 - 最新的 覆盖以前的定义。
因此,当您使用参数定义attack(target)
时,将覆盖访问方法attack
。现在,您只剩下两种方法attack(target)
和attack=