ruby咬了一下
我想创建一个包含给定用户的安全权限的位。
在c#中,我会通过创建一个枚举来做到这一点,然后我会对二进制值进行一些操作,通过和’&&’来查看它是否会产生一个TRUE值。
我怎样才能在Ruby中做到最好?
如果基础值很重要,那么您可以创建一个像枚举一样使用的模块
module Groups ADMIN = 1 BOSS = 2 CLERK = 4 MEAT = 8 BREAD = 16 CHEESE = 32 end
要按位置or
一起设置权限
permissions = Groups::BOSS | Groups::MEAT | Groups::CHEESE
并测试你做一点点and
>> permissions & Groups::CHEESE > 0 => true >> permissions & Groups::BREAD > 0 => false
我也喜欢用这样的方法让你的实际位掩码更具可读性
permissions = 0b0010_1010
Bitwse操作在Ruby中是微不足道的。
> 1 | 2 # Create a bitmask from permission 2^0 + 2^1 => 3 > 3 & 1 == 1 # See if the bitmask contains the 2^0 permission => true > 3 & 4 == 4 # See if the bitmask contains the 2^2 permission => false
Ryan Bates谈到在此播客中使用按位操作嵌入关联。 你可以在这里阅读文字版本。