Ruby添加不带“的getter和setter;def";?
我必须向类书中添加getter和setter,如下所示:Ruby添加不带“的getter和setter;def";?,ruby,class,setter,getter,function,Ruby,Class,Setter,Getter,Function,我必须向类书中添加getter和setter,如下所示: 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
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
作为二传手。我甚至不知道一个能干的人应该是什么样子。
有什么帮助吗?使用
attr\u访问器
:
class Book
attr_accessor :title, :author, :pages, :year
def initialize (title, author, pages, year)
@title = title
@author = author
@pages = pages
@year = year
end
end
您还可以使用
attr\u访问器
(或attr\u阅读器
和attr\u编写器
)Ruby让您使用这些方法定义简单的getter/setter,以及。在您的示例中,您可以使用attr\u 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\u accessor:title
相当于定义以下两种方法:
def title
@title
end
def title=(new_title)
@title = new_title
end
您可以在Ruby文档中找到更多关于(即名称以
=
结尾的方法)的信息。使用define\u method
动态定义您的方法。在这种情况下,直接使用attr\u访问器
也应该有效。它将隐式地为您定义getter和setter。出于好奇-为什么不允许使用def
?getter只是一个返回实例变量的方法。例如,name实例变量的getter可以是:(def name return name end
)@IdanArye,可能是因为这是他的家庭作业。:)显然这是我的家庭作业。我甚至不认为不使用它:)它是Ruby特性,因此也适用于Rails。显然是重复的。