2

そう.....?いつですか?

以下に小さな例を書きましたが、「ポテトスカッシュ」が表示されていないため、機能していないようです。それは戻ってきます:「あなたはのタイプの食べ物を食べています」

class Food

        def initialize(food=“none”)
            @food = food
        end

        def self.food=(food=“none”)

        end

        def self.type?
            puts “you are eating a #{food} type of food” # defines the type of food you are eating.
        end
    end 

Food.new("potato squash")
Food.type?

上級者向けの Thx。

4

3 に答える 3

3

どのメソッドもクラス メソッドであってはなりません。インスタンス メソッドは、クラスのインスタンスに格納されているデータを操作する必要がある場合に使用されます。クラス メソッドは、そのクラスに関連するデータを操作する必要がある場合に使用されます。

たとえば(しゃれた意図はありません):

class Food
  def initialize(food="none")
    @food = food
  end

  # operating on data that is stored in this instance
  def type?
    puts "you are eating a #{@food} type of food"
  end

  # operating on data pertaining to this class
  def self.types
    return ['Fruits', 'Grains', 'Vegetables', 'Protein', 'Dairy']
  end
end 
于 2013-10-30T18:15:00.927 に答える
1
    class Food
        attr_accessor :food
        def initialize(food="none")
            @food = food
        end

        def type?
            puts "you are eating a #{@food} type of food"
        end
    end

では、それらの中からどのように選択するのですか?

私は自問し@foodます: どちらがより理にかなっているのかを見てください。typeFoodtype

あなたの食べ物の例から逸脱するために:

インスタンス メソッドは、特定のオブジェクトから尋ねたい質問に適用されます。Personクラスにその名前を尋ねるのではなく、@personオブジェクトに対してそうします。

一方、Personたとえばクラスに問い合わせると、types_of_nationalitiesすべての国籍の配列が返される場合があります。しかし、あなたは@person彼が何であるかを尋ねるでしょうnationality

これで問題が少し解決することを願っています。

于 2013-10-30T17:09:19.270 に答える
0

type?はインスタンス メソッドであるため、代わりにこのコードを使用してみてください。インスタンス メソッドは Food クラスのインスタンス ( などFood.new("potato squash"))でのみ機能します。

f = Food.new("potato squash")
f.type?
于 2013-10-30T17:07:55.937 に答える