0

わかりました、私はルビーを学んでいますが、チュートリアルで少し問題があります。あなたが私を助けてくれるかどうか疑問に思っていました!

次のコードを使用します。

class Dish
def initialize(name, ingred, descrip)
    @name = name
    @ingred = ingred
    @descrip = descrip
end
def name
    @name
end
def name=(new_name)
    @name = new_name
end
def ingred
    @ingred
end
def ingred=(new_ingred)
    @ingred = new_ingred
end
def descrip
    @descrip
end
def descrip=(new_descrip)
    @descrip = new_descrip
end
def display  
    puts "I am a #{@name} and my ingredient is #{@ingred} and my description is #{descrip}"  
    end
end
dis1 = Dish.new('Pizza', 'sauce', 'put sauce on that thing')
dis1.display

わかりましたので、これが私の質問です。十分に説明していただければ幸いです。これまでのところ、クラスの新しいインスタンスを作成するときに 1 つのパラメーターを入力することを学びました (つまり、(name, ingred, descrip))。私が疑問に思っているのは、料理に複数の食材が含まれている場合、それをクラスにどのように追加するのですか? また、食材の数や名前の数を数えたい場合は、どうすればよいでしょうか。私はちょうどクラスについて学んでいて、Google で検索する言葉遣いを正確に一致させるのに苦労しています。ありがとう!

4

3 に答える 3

0

私の前の2つの回答は両方とも説明パラメーターを省略していたため、Cary Swovelandの回答を盗み、説明パラメーターを追加します。

class Dish
  attr_accessor :name, :descrip
  def initialize(name, *ingred, descrip) # Only in Ruby 1.9+
      @name = name
      @ingred = *ingred
      @descrip = descrip
  end
  def ingred
    @ingred
  end
  def ingred=(*ingred)
    @ingred = ingred
  end
  def add_ingred(ingred)
    @ingred << ingred
  end  
  def remove_ingred(ingred)
    @ingred.delete(ingred)
  end  
  def nbr_ingred
    @ingred.count
  end
  def display  
      puts "I am a #{@name} and my ingredient is #{@ingred.join(', ')} and my description is #{descrip}"  
  end
end

dis1 = Dish.new('Pizza', 'sauce', 'ham', 'put ingredients on that thing.')
dis1.add_ingred('fish')
dis1.display #=> I am a Pizza and my ingredient is sauce, ham, fish and my description is put ingredients on that thing.
于 2013-09-26T07:44:49.023 に答える
0

配列を使用します。

class Dish
    class Ingredient
        attr_accessor :name, :description

        def initialize(name, description)
            @name = name
            @description = description
        end

        def to_s
            "#{name} - #{description}"
        end
    end

    attr_accessor :name, :description, :ingredients

    def initialize(name, description)
        @name = name
        @description = description
        @ingredients = []
    end

    def to_s
        "#{name} - #{description}\n #{ingredients.join("\n").to_s}"
    end
end

pizza = Dish.new("Pizza", "Italian style pizza")
pizza.ingredients << Dish::Ingredient.new("Tomato Sauce", "Juicy Juicy Tomato Sauce.")
pizza.ingredients << Dish::Ingredient.new("Cheese", "Cheese, duh.")

puts pizza.to_s
于 2013-09-26T02:22:24.580 に答える