未定义的局部变量或方法错误Ruby

时间:2017-11-17 16:58:25

标签: ruby variables

我刚刚开始编写bootcamp,我在实验室中收到此错误。我已尝试使用“”设置值,但无济于事我仍然收到此错误 “未定义的方法`品种='代表#(NoMethodError)

因此在正确定义“结束”后,我仍然收到此错误。

我目前有:

class Dog
  def name=(fido)
    @name= fido
  end

  def name
    @name
  end

  def breed=(beagle)
    @breed= beagle
  end

  def breed
    @breed
  end
end

fido = Dog.new
fido.name = fido
fido.breed = beagle

1 个答案:

答案 0 :(得分:0)

一些解释。与

fido = Dog.new
fido.name = fido
puts "fido.name=#{fido.name}  fido.name.class=#{fido.name.class}"
fido.breed = self.beagle

您正在使用刚刚创建的局部变量fido,并将方法beagle发送到self,当没有显式接收器时,默认接收器,在这种情况下(在任何情况下) class)是Ruby解释器提供的特殊对象main

$ ruby -w fido_op.rb 
fido.name=#<Dog:0x007ffdc2a5d620>  fido.name.class=Dog
fido_op.rb:22:in `<main>': undefined method `beagle' for main:Object (NoMethodError)

班级狗可以简化:

class Dog
  attr_reader   :name
  attr_accessor :breed

  def initialize(name)
    @name = name
  end
end

fido = Dog.new('fido')
puts "fido.name=#{fido.name}  fido.name.class=#{fido.name.class}"
fido.breed = 'beagle'
puts "fido.breed=#{fido.breed}"

执行:

$ ruby -w fido.rb 
fido.name=fido  fido.name.class=String
fido.breed=beagle