2015-10-12 88 views
-4

我創建了一個射擊遊戲,並且每個殺死用戶的人都獲得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 

遊戲我創造了已經工作,我詢問爲什麼它必須超出定義才能添加到變量中。

+1

好的,讓我們看看你的帖子遭到破壞後會有多好。 –

+0

爲了它,已經完成了天才。 – 13aal

回答

0

在你的第一個例子中,你在方法中嵌入了方法的名字,這不會給你想要的結果。你已經創建了一個遞歸方法,它不會退出。

def method 
    [...] 
    method 
end 

在第二個你已經刪除了新的調用,這將允許該方法正確退出。

在Ruby中的面向對象的腳本的基礎是一樣的東西:

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 

調用increment_var以2:

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來實例化對象的狀態。

+0

這是迄今爲止我得到的最詳細的答案,所以你應該得到一些認可謝謝。 – 13aal

+0

這不是什麼。你應該看到我的詳細答案。 –

0

把實例變量的初始化在初始化方法,像這樣:當你創建類的新實例

def initialize: 
    @kills = 0 
    @points = 0 
end 

initialize方法被調用。每次調用o.method()時,實例變量都會根據您的預期進行更改。