gpt4 book ai didi

ruby-on-rails - 你能解释一下这段代码的作用吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:08 26 4
gpt4 key购买 nike

我刚看完 railscast episode #189并且正在使用 bit_mask 将值存储在用户表中。我正在尝试实现同样的事情,但是当我通过 irb 进行测试时,我遇到了错误。首先有人可以解释这到底是怎么回事。我知道第一行在做什么,第二行的一部分

ROLES = %w[admin moderator author]

def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
end

def roles
ROLES.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? }
end

在 irb 我得到这个:

irb(main):013:0> ROLES = %w[admin moderator author]
(irb):13: warning: already initialized constant ROLES
=> ["admin", "moderator", "author"]
irb(main):014:0> roles = %w[admin author]
=> ["admin", "author"]
irb(main):015:0> roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
NoMethodError: undefined method `sum' for [1, 4]:Array

最佳答案

它在 irb 中不起作用的原因是 sum在 ActiveSupport 中定义,而不是 ruby​​ 的标准库。如果你require 'active_support'首先(或只使用脚本/控制台),它将在 irb 中工作。

什么 roles=是根据 ROLES 中的角色顺序将角色数组转换为位掩码array (item) 然后将该位掩码保存为 role_mask .例如["admin", "author"]将变成 5(二进制为 0b101)。 ROLES 中没有的角色将被忽略(例如 ["admin", "bla"]["admin"] 相同)。

什么 roles是将保存的位掩码转回角色数组。

关于ruby-on-rails - 你能解释一下这段代码的作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com