私は次のコードが何をすべきかをまとめるのに多くの困難を抱えています(私はそれが何をすべきかを理解しています、私はただそれらをまとめることができません):
def roles=(roles)
self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.inject(0, :+)
end
def roles
ROLES.reject do |r|
((roles_mask || 0) & 2**ROLES.index(r)).zero?
end
end
ROLES
リンクで指定された配列です。roles
配列でもあると思います。
- セッターメソッドと通常のメソッドが同じ名前であるのはなぜですか?
map
メソッドのオブジェクトとして機能する配列はどれですか?roles
is['author', 'editor']
とROLES
isの場合['author', 'editor', 'manager']
、演算子はどのようにして?&
の配列を作成しmap
ますか?- 何
2**ROLES
ですか?これは本当に2
の累乗になっていることがわかりましたROLES.index(r)
。 - 「Railsアプリケーションのビットマスク属性」は、配列に対して
(roles & ROLES)
パラメーターをサニタイズしていると言っていますが、サニタイズとはどういう意味ですか?roles
ROLES
r
が配列の現在の値である場合、戻り値のメソッドは(roles & ROLES)
どのようになりますか?これが配列内のの位置を返していることはわかりましたが、これとどのように相互作用/機能するかはまだわかりません。index
2**ROLES
r
roles
ROLES
(roles & ROLES).map
inject
メソッドは、メソッドの括弧内の条件でどのように機能しmap
ますか?
このビットマスキングがどのように機能するかを理解したいのですが、式の右辺にあるものdef roles=(roles)
が整数を返す方法がわかりません。