Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中的实例变量中传递参数时出错_Ruby - Fatal编程技术网

在Ruby中的实例变量中传递参数时出错

在Ruby中的实例变量中传递参数时出错,ruby,Ruby,当我尝试存款时,我在pin上得到一个错误,但是当我在pin检查中删除@并将其作为正常变量处理时,它就工作了。在codeacademy中,它表明检查pin的正确方法是 class Account attr_reader :name attr_reader :balance def initialize(name, balance=100) @name = name @balance = balance end public def display_balance(pin_

当我尝试存款时,我在pin上得到一个错误,但是当我在pin检查中删除@并将其作为正常变量处理时,它就工作了。在codeacademy中,它表明检查pin的正确方法是

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

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

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

 private
 def pin
   @pin = 1
 end
 def pin_error
   return "Access denied: incorrect PIN."
 end 
 end

checking_account=Account.new("bob",200)
checking_account.deposit(1,20)
但是它不起作用,即使它应该起作用,为什么呢

但是它不起作用,即使它应该起作用,为什么呢

因为您的
@pin
从未初始化。您的代码与codecademy中的代码之间一定存在差异(它们可能在初始值设定项中初始化
@pin
,而您没有)

但是当我删除pin检查中的@并将其视为正常变量时

错误。。这不是一个变量。当您将其设置为
pin
而不是
@pin
时,它开始指向您的私有方法。返回一个pin码。这就是它起作用的原因



请注意,如果您在存款前只需显示余额,您的代码将按原样工作。这被称为“呼叫顺序依赖关系”,这是不好的。

pin\u number==@pin
将返回
false
,因为您从未设置
@pin
,所以它仍然是
nil

您可以这样做,而不是使用私有方法:

  if pin_number==@pin 

如果是初始化,您必须在私有pin上向下滚动一点method@ChristopherBovo:如果您调用该方法,当然可以。但是你不调用它(在你的例子中),我用codeacademy one给出的代码替换了代码,我调用了这个方法,但它仍然不起作用,你也不能调用这个方法,因为它是私有的,如果有人能找到错误,请告诉我it@ChristopherBovo当前位置Tom发布了工作代码,将其与您的代码进行比较,找出差异。另请参见我答案末尾的注释。它是初始化,您必须在私有pin methodNo处向下滚动一点。定义方法不会初始化变量。这正是您所犯的错误,我已经纠正了。如果您在初始值设定项中或以其他方式调用该方法,那么变量将被初始化。但是你没有在任何地方调用该方法。通过初始化pin,它可以工作,但没有从站点执行此类操作,因此他们的代码中存在错误,我提交了一份报告。谢谢不要那样修改代码。现在它是一段完全不同的代码,错误完全不同。我冒昧地回滚了您的代码更改,因为它们与文本不一致。不,错误保持不变,当我传递pin时,我得到pin错误,这就是我所说的。不,您得到的pin错误完全不同。(“无法调用私有方法
pin
def initialize(name, pin, balance=100)
  @name = name
  @pin = pin
  @balance = balance
end

# ...

checking_account=Account.new("bob", 1, 200)
checking_account.deposit(1, 20)