我必须将getter和setter添加到类似Book的类:
class Book
def initialize (title, author, pages, year)
@title = title
@author = author
@pages = pages
@year = year
end
end
问题是我不能使用def
。有可能吗?
我知道的唯一方法是使用:
def change_name(name)
@name = name
end
对于一个二传手。我甚至不知道吸气剂应该是什么样的。 有什么帮助吗?
答案 0 :(得分:2)
Ruby允许您使用方法attr_accessor
,attr_reader
和attr_writer
定义简单的getter / setter。在您的示例中,您可以使用attr_accessor
为实例变量定义getter和setter:
class Book
attr_accessor :title, :author, :pages, :year
def initialize (title, author, pages, year)
# same as before...
end
end
book = Book.new('foo', 'bar', 100, 2010)
book.title
# => "foo"
book.title = 'baz'
book.title
# => "baz"
调用attr_accessor :title
等同于定义以下几种方法:
def title
@title
end
def title=(new_title)
@title = new_title
end
您可以在Ruby文档中找到有关assignment methods的更多信息(即名称以=
结尾的方法)。
答案 1 :(得分:1)
使用attr_accessor
:
class Book
attr_accessor :title, :author, :pages, :year
def initialize (title, author, pages, year)
@title = title
@author = author
@pages = pages
@year = year
end
end
答案 2 :(得分:1)
您也可以使用attr_accessor
(或attr_reader
和attr_writer
)
答案 3 :(得分:1)
使用define_method
动态定义您的方法。在这种情况下,直接使用attr_accessor
也应该有效。它将隐式定义getter和setter。