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?

谢谢先进的家伙。

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什么是你的typeFood什么是你的type。看看哪些更有意义。

只是为了偏离你的食物例子:

实例方法适用于您想从特定对象提出的那些问题。你不会问一个Person类的名字,但你会问一个@person对象。

另一方面,你问一Person门课,比如说,types_of_nationalities它可能会给你返回所有国籍的数组。但你会问@personnationality是什么。

希望这能澄清一点。

于 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 回答