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谈到在此播客中使用按位操作嵌入关联。 你可以在这里阅读文字版本。