从方法的内部和外部添加变量

时间:2015-10-12 22:12:00

标签: ruby

我创造了一个射击游戏,每个被杀的人都会获得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

我创建的游戏已经有效,我问为什么它必须超出定义才能添加到变量中。

2 个答案:

答案 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来实例化对象的状态。