2014-11-27 3 views
0

Я пытаюсь выяснить, можно ли передавать значение между методами в классе Ruby.Передача значений переменных между методами класса

Я не нашел много от себя и решил, что я попрошу экспертов. Может ли это быть передано как аргумент/параметр другому методу?

class PassingValues 

    def initialize 
    @foo = 1 
    end 

    def one 
    @foo += 1 
    end 

    def two 
    @foo += 1 
    end 

    def three 
    p @foo 
    end 

end 

bar = PassingValues.new 

Если бы я хотел это, чтобы распечатать значение Foo 3:

bar.three 

ответ

2

Если вы хотите bar.three напечатать 3 вам нужно будет звонить до одного и двух методов для обеспечения переменной обновляется до трех так:

class PassingValues 

    def initialize 
    @foo = 1 
    end 

    def one 
    @foo += 1 
    end 

    def two 
    one 
    @foo += 1 
    end 

    def three 
    two 
    p @foo 
    end 

end 

Во всяком случае это не делает до тех пор, пока методы будут в конечном итоге модифицировать переменную, поэтому каждый раз, когда вы вызываете один из них, число будет увеличивать ожидаемую сумму.

0

Те методы экземпляра, а не методы класса. И @foo уже поделился ими.

bar = PassingValues.new 
bar.one 
bar.two 
bar.three 
0

В этом случае @foo - это переменная экземпляра и на нее можно ссылаться (она не передается здесь) в любом методе класса.

При вызове создается bar как экземпляр класса с помощью: PassingValues.new
инициализируется и устанавливает @foo к 1.

Когда вы затем вызвать метод three с помощью bar.three, вы просто распечатать @foo , который по-прежнему равна 1.

Вы можете изменить метод three для увеличения @foo на 2, так что теперь равна 3, то печать:

def three 
    @foo += 2 
    p @foo 
end