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