'books=(books)' 方法在做什么?
what a method 'books=(books)' is doing?
我加入了 Rails 团队并维护代码。
有些对象是由 Gem virtus 控制的,但我真的不明白下面的代码在做什么。
我理解'latest_book'属性可以从Books中收集最新书籍的结果,但为什么可以呢? 'books=(books)' 在做什么?为什么 'super books' 在这里?
class GetBooks
include Virtus.model
include ActiveModel::Model
attribute :books, Array[Book]
attribute :latest_book, Book
def books=(books)
self.latest_book = books.sort_by { |book| book['createdate'] }.last
super books
end
end
你能帮帮我吗?
def books=(books)
正在定义一个名为 books=
的方法,它接受一个参数 books
。是的,这令人困惑。它可能应该是 def books=(value)
或 def books=(new_books)
.
是的,=
是方法名称的一部分。 self.books = value
确实是 self.books=(value)
的语法糖。同样,该方法是 books=
.
super books
是 super(books)
。 super
调用下一个继承或包含的同名方法;它正在调用 attribute :books, Array[Book]
创建的 books=
。这是一个 "method override" 允许您添加到现有方法的行为。
当调用 books=
时,它会更新 latest_books
,然后调用其原始方法来设置 books
属性。
gb = GetBooks.new
gb.books = [old_book, new_book]
p gb.latest_book # new_book
p gb.books # [old_book, new_book]
我加入了 Rails 团队并维护代码。 有些对象是由 Gem virtus 控制的,但我真的不明白下面的代码在做什么。
我理解'latest_book'属性可以从Books中收集最新书籍的结果,但为什么可以呢? 'books=(books)' 在做什么?为什么 'super books' 在这里?
class GetBooks
include Virtus.model
include ActiveModel::Model
attribute :books, Array[Book]
attribute :latest_book, Book
def books=(books)
self.latest_book = books.sort_by { |book| book['createdate'] }.last
super books
end
end
你能帮帮我吗?
def books=(books)
正在定义一个名为 books=
的方法,它接受一个参数 books
。是的,这令人困惑。它可能应该是 def books=(value)
或 def books=(new_books)
.
是的,=
是方法名称的一部分。 self.books = value
确实是 self.books=(value)
的语法糖。同样,该方法是 books=
.
super books
是 super(books)
。 super
调用下一个继承或包含的同名方法;它正在调用 attribute :books, Array[Book]
创建的 books=
。这是一个 "method override" 允许您添加到现有方法的行为。
当调用 books=
时,它会更新 latest_books
,然后调用其原始方法来设置 books
属性。
gb = GetBooks.new
gb.books = [old_book, new_book]
p gb.latest_book # new_book
p gb.books # [old_book, new_book]