我创造了一个射击游戏,每个被杀的人都会获得5分和1分。这些点被添加到实例变量中,实例变量位于已定义的方法中,如下所示:
def method
@kills = 0
@points = 0
puts "You shoot a bad guy!"
@kills += 1
@points += 5
method
end
为什么当实例变量在方法内部时,它重复该方法并且不添加到实例变量,它只重复该方法并在0处重新启动变量。
但是当实例变量在方法之外时,它将添加到实例变量并重复方法,如下所示:
@kills = 0
@points = 0
def method
puts "You shoot a bad guy!"
@kills += 1
@points += 5
end
我创建的游戏已经有效,我问为什么它必须超出定义才能添加到变量中。
答案 0 :(得分:0)
将实例变量的初始化放在初始化方法中,如下所示:
def initialize:
@kills = 0
@points = 0
end
创建类的新实例时会调用initialize方法。每次调用o.method()
时,实例变量都会按预期更改。
答案 1 :(得分:0)
在您的第一个示例中,您已在方法中嵌入方法的名称,这不会为您提供所需的结果。你已经创建了一个递归方法,它不会退出。
def method
[...]
method
end
在第二个中你删除了新的调用,这将允许方法正确退出。
Ruby中OO脚本的基础知识如下:
class Foo
def initialize
@var = 0
end
def var
@var
end
def increment_var(n=1)
@var += n
end
def decrement_var(n=1)
@var -= n
end
end
我们可以使用Foo类创建名为foo
的类的新实例:
foo = Foo.new
foo.class # => Foo
我们可以查看@var
的当前值:
foo.var # => 0
在没有参数的情况下调用increment_var
默认为1:
foo.increment_var # => 1
使用2:
调用increment_var
foo.increment_var(2) # => 3
foo.var # => 3
调用foo.decrement_var
时也是如此:
foo.decrement_var # => 2
foo.decrement_var(2) # => 0
foo.var # => 0
我们使用initialize
方法通过调用类上的new
来实例化对象的状态。