所以.....?什么时候?
我在下面写了一个小例子,但它似乎不起作用,因为“马铃薯南瓜”没有显示。它正在回归:“你正在吃一种空白类型的食物”
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?
高级人员。
答案 0 :(得分: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
答案 1 :(得分: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
,你的type
与Food
是什么type
。看哪些更有意义。
只是偏离食物的例子:
实例方法适用于您想要从特定对象提出的问题。您不会向Person
类询问其名称,但是对@person
对象执行此操作。
另一方面,你问一个Person
课程,比如,types_of_nationalities
这可能会让你回归所有国籍。但你会问@person
他的nationality
是什么。
希望这可以解决一些问题。
答案 2 :(得分:0)
请尝试使用此代码,因为type?
是一种实例方法。实例方法仅适用于Food类的实例(例如Food.new("potato squash")
):
f = Food.new("potato squash")
f.type?