当boolean未设置为实例变量时,方法运行的原因是什么?

时间:2014-03-04 22:13:58

标签: ruby

我刚刚开始使用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)

1 个答案:

答案 0 :(得分:2)

  

在方法之下,我有私有类引脚设置@pin = 1234,所以我认为应该使用@pin而不是pin。

没有; pin调用该方法,该方法设置@pin = 1234并返回其值。

引用@pin只引用该变量,仅此而已;它不会调用私有pin方法。

我相信这应该回答你的其他问题。