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