【发布时间】:2020-02-24 05:37:58
【问题描述】:
当没有变量类别的输入时,我试图在 Produto 类中创建一个默认值为“Geral”的对象,但我在理解这个挑战的问题时遇到了一些麻烦,我已经一直在寻找关于面向对象的更深入的课程,但不知道我应该改变什么才能让它工作,如果这是一个愚蠢的问题,我真的很抱歉。
categoria.rb
require 'produto'
class Categoria
attr_accessor :nome
def initialize(nome: 'Geral')
@nome = nome
end
end
class Produto
attr_accessor :nome, :categoria, :preco, :estoque
def initialize(nome: 'Sem nome', categoria: categoria , preco: '0', estoque: '0')
@nome = nome
@preco = preco
@categoria = categoria
@estoque = estoque
end
def adiciona_estoque(quantidade)
@estoque += quantidade
end
def remove_estoque(quantidade)
@estoque -= quantidade
end
end
spec.rb
it "deveria criar um objeto de categoria Geral por padrão" do
nome = 'Teclado'
preco = 100
estoque = 3
produto = Produto.new(nome: nome, preco: preco, estoque: estoque)
expect(produto.nome).to eq 'Teclado'
expect(produto.categoria.nome).to eq 'Geral'
expect(produto.preco).to eq 100
expect(produto.estoque).to eq 3
end
rspec 输出
Produto deveria criar um objeto de categoria Geral por padrão
Failure/Error: expect(produto.categoria.nome).to eq 'Geral'
NoMethodError:
undefined method `nome' for nil:NilClass
# ./spec/1_produto_spec.rb:25:in `block (2 levels) in <top (required)>'
【问题讨论】:
-
@categoria = categoria=>@categoria = categoria || Categoria.new