2014-03-04 22 views
3

我剛剛開始Ruby,並有一個初學者的問題。爲什麼當pin_number == @pin(在display_balancewithdraw方法),我得到一個錯誤,但當我編輯設置pin_number == pin,這兩種方法然後工作?原因爲什麼當布爾值未設置爲實例變量時方法運行?

在下面的方法,我有privatepin設置@pin = 1234,所以我認爲應該使用@pin而不是pin工作過。

class Account 
    attr_reader :name, :balance 
    def initialize(name, balance=100) 
    @name = name 
    @balance = balance 
    end 

    def display_balance(pin_number) 
    if pin_number == @pin 
     puts "Balance: $#{@balance}" 
    else 
     pin_error 
    end 
    end 

    def withdraw(pin_number, amount) 
    if pin_number == @pin 
     @balance -= amount 
     puts "Withdrew #{amount}. New balance #{amount}." 
    else 
     pin_error 
    end 
    end 

    private 
    def pin 
    @pin = 1234 
    end 

    def pin_error 
    return "Access denied: incorrect PIN." 
    end 
end 

checking_account = Account.new("Rick", 1_000_000) 
checking_account.display_balance(1234) 

回答

2

下面的方法,我有私有類引腳設置@pin = 1234,所以我認爲應該使用@pin工作過,而不是腳。

否; pin調用該方法,該方法既設置@pin = 1234並返回其值。

引用@pin只是引用該變量而已;它不會調用私人的pin方法。

我相信這應該回答你的其他問題。

+1

語言是「Ruby」,因爲它是語言的專有名稱。調用它是「紅寶石」。如果您打算將它作爲命令行中的命令來引用,請將其標記爲「代碼」或類似TTY的格式。如果你認爲它們是相同的,那麼爲什麼要使用「C++」和「C#」? –

+1

@theTinMan http://stackoverflow.com/a/6053314/2700898我不是說所有語言都是這種情況,但對於ruby和perl來說,例如它是如此。 – Matt

+0

我相信http://stackoverflow.com/a/6053302/128421。您會注意到,引用(包括引用的常見問題解答)在討論語言時都提及「Ruby」和「Perl」。 –

相關問題