我做到了:
class Animal
attr_accessor :color
def color(color)
@color = color
# TODO: what should this method return?
end
tiger = Animal.new
tiger.color("red")
tiger.color
我希望不会看到"red"
,但是它表示给出了错误的参数数量。
如何查看tiger.color
的值?如果color是initialize方法的一部分,是否可以只看到颜色,而不能看到其他属性?
答案 0 :(得分:3)
因为是对的:您的color
方法采用一个参数。您无需定义任何参数即可color
。所以
def color
@color
end
或
attr_reader :color
后者是相同的,但更为简洁。
最后一件事:您定义了setter方法,这没关系,但是命名法是错误的(或者至少是误导性的)。我建议
def color=(color)
并称呼他们
obj.color = color
答案 1 :(得分:1)
attr_accessor
为您设置读取器和写入器方法。 attr_accessor :color
等同于...
def color
@color
end
def color=(value)
@color = value
end
因此,您无需编写任何方法即可获取基本属性方法。
class Animal
attr_accessor :name, :color, :species, :natural_habitat
end
请注意,设置器是thing=
,被称为obj.thing = value
而不是obj.thing(value)
。 obj.thing = value
确实是object.thing=(value)
。
tiger = Animal.new
tiger.color=(:red)
puts tiger.color # red
tiger.color = :blue
puts tiger.color # blue
最后,如果要将它们传递给new
,则必须自己编写该部分,方法是定义initialize
以接受参数并设置实例变量。
class Animal
attr_accessor :name, :color, :species, :natural_habitat
def initialize(name: , color:, species:, natural_habitat:)
@name = name,
@color = color,
@species = species,
@natural_habitat = natural_habitat
end
end
tiger = Animal.new(
name: "Hobbes",
color: :orange,
species: :tiger,
natural_habitat: :jungle
)
puts tiger.color