首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'books=(books)‘方法在做什么?

'books=(books)‘方法在做什么?
EN

Stack Overflow用户
提问于 2020-07-06 12:34:45
回答 1查看 34关注 0票数 2

我加入了Rails团队并维护代码。有些对象是由Gem virtus控制的,但我真的不明白下面的代码是怎么做的。

我理解'latest_book‘属性可以从图书中收集最新图书的结果,但是为什么可以这样做呢?“books=(书籍)”在做什么?为什么“超级图书”会出现在这里?

代码语言:javascript
复制
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

你能帮我一下吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-06 13:07:22

def books=(books)正在定义一个名为books=的方法,该方法只接受一个参数books。是的,这是令人困惑的。它可能应该是def books=(value)def books=(new_books)

是的,=是方法名称的一部分。self.books = value实际上是self.books=(value)的语法糖。同样,该方法是books=

super bookssuper(books)super调用下一个继承或包含的同名方法;它调用由attribute :books, Array[Book]创建的books=。这是一个"method override",它允许您添加到现有方法的行为。

当调用books=时,它会更新latest_books,然后调用其原始方法来设置books属性。

代码语言:javascript
复制
gb = GetBooks.new
gb.books = [old_book, new_book]

p gb.latest_book # new_book
p gb.books       # [old_book, new_book]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62749317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档