我刚刚开始编写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
答案 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