2017-02-09 1 views
-1

Comment imprimer mes valeurs en utilisant uniquement "Mets recipe.summary? Ive en boucle dans les" instructions "et les" ingrédients "mais rien ne s'affiche quand i" Met la recette. résumé ».Impossible d'imprimer les valeurs de ma matrice dans ruby ​​

Peut-être im en boucle à travers elle de façon incorrecte? Voici mon code.

class Ingredient 
    attr_reader :quantity, :unit, :name, :summary 
    def initialize (quantity,unit,name) 
    @quantity = quantity 
    @unit = unit 
    @name = name 
    @summary= summary 
    end 

    def summary 
    "#{quantity} #{unit} #{name}" 
    end 
end 




class Recipe 
    attr_reader :name, :instructions,:ingredients 

    def initialize(name,instructions,ingredient) 
    @name = name 
    @instructions = instructions 
    @ingredient = ingredient 
    end 

    def instructions 
@instructions= instructions.each do |instruction| 
    puts instruction 
    end 
end 

    def ingredients 

    @ingredients = ingredients.each do |ingredient| 
     puts ingredient 
    end 


    def summary 
    @summary 
    puts "Name: #{name}" 
    puts "#{ingredients}" 
    end 
end 
end 

# ingredient = Ingredient.new(47.0, "lb(s)", "Brussels Sprouts") 
# puts ingredient.summary 

name = "Roasted Brussels Sprouts" 

instructions = [ 
    "Preheat oven to 400 degrees F.", 
    "Cut off the brown ends of the Brussels sprouts.", 
    "Pull off any yellow outer leaves.", 
    "Mix them in a bowl with the olive oil, salt and pepper.", 
    "Pour them on a sheet pan and roast for 35 to 40 minutes.", 
    "They should be until crisp on the outside and tender on the inside.", 
    "Shake the pan from time to time to brown the sprouts evenly.", 
    "Sprinkle with more kosher salt (I like these salty like French fries).", 
    "Serve and enjoy!" 
] 

ingredients = [ 
    Ingredient.new(1.5, "lb(s)", "Brussels sprouts"), 
    Ingredient.new(3.0, "tbspn(s)", "Good olive oil"), 
    Ingredient.new(0.75, "tspn(s)", "Kosher salt"), 
    Ingredient.new(0.5, "tspn(s)", "Freshly ground black pepper") 
] 


recipe = Recipe.new(name, instructions, ingredients) 
puts recipe.summary 
+0

Veuillez lire "[mcve]". Essayez de réduire votre code au strict minimum qui duplique le problème. –

Répondre

0

Vous appelez puts après avoir essayé de revenir @summary. techniquement le résultat de puts "#{ingredients}" est ce qui est retourné, ce qui est probablement rien ..
Déplacez le puts ci-dessus.

def summary 
    puts "Name: #{name}" 
    puts "#{ingredients}" 
    @summary 
end 
+0

Il n'imprime toujours rien après cela, mais je vois ce que vous dites. – Tiago

1

L'objet de recette n'a pas une méthode summary parce que vous ne faites attention à votre imbrication:

def ingredients 

    @ingredients = ingredients.each do |ingredient| 
     puts ingredient 
    end 


    def summary 
    @summary 
    puts "Name: #{name}" 
    puts "#{ingredients}" 
    end 
end 

Déplacer la méthode summary en dehors de la méthode ingredients.

@summary à l'intérieur de la méthode summary ne fait rien, donc Ruby va jeter ça.

vous causent des boucles en confondant Ruby avec les noms des méthodes qui sont générés avec attr_reader et les appeler des méthodes à l'intérieur avec les mêmes noms, tels que:

attr_reader :name, :instructions,:ingredients 

... 

    def instructions 
    @instructions= instructions.each do |instruction| 
    puts instruction 
    end 

Vous obtiendrez SystemStackError: stack level too deep lors de l'exécution de ce code. Je recommande de travailler avec des tutoriels sur l'écriture de code Ruby, en utilisant un éditeur qui gère automatiquement l'indentation ou qui facilite le reformatage/retrait, et en installant un analyseur de code comme Rubocop et en l'utilisant religieusement.