Ruby语法:位掩码
我很难把它应该做的事情组合起来(我知道它应该做什么,我就是不能把它们组合起来):Ruby语法:位掩码,ruby,syntax,Ruby,Syntax,我很难把它应该做的事情组合起来(我知道它应该做什么,我就是不能把它们组合起来): 角色是链接中指定的数组。我假设角色也是一个数组 为什么setter方法和常规方法具有相同的名称 什么数组用作map方法的对象?如果角色是['author','editor']而角色是['author','editor','manager'],那么&操作符如何为映射创建数组 什么是2**角色?我发现这实际上只是2提升到角色的力量。索引(r) “”表示,(角色和角色)正在针对数组角色清理参数角色,但清理意味着什么 如果
角色
是链接中指定的数组。我假设角色
也是一个数组
map
方法的对象?如果角色
是['author','editor']
而角色
是['author','editor','manager']
,那么&
操作符如何为映射创建数组
2**角色
?我发现这实际上只是2
提升到角色的力量。索引(r)
(角色和角色)
正在针对数组角色
清理参数角色
,但清理意味着什么r
是数组(角色和角色)
的当前值,2**roles
的索引方法如何返回r
?我发现这是返回角色
在数组角色
中的位置,但我仍然不知道(角色和角色)。map
如何与此交互/工作
inject
方法如何在map
方法括号中的条件下工作我想知道这个位屏蔽是如何工作的,但我不知道等式右侧的
def roles=(roles)
如何返回一个整数。基本上index
调用通过确定给定角色在角色数组中的位置,将其转换为整数。然后将2提升到该索引的幂次方,inject
简单地对结果求和
简言之
步骤1是通过使用&
来确定两个数组中的哪些值匹配,从而获取在角色中找到的角色
步骤2,为每个匹配的角色计算2**索引。Map返回这些值的数组
第3步,对数组求和以得到最终整数
其思想是为每个角色组合计算一个唯一的整数
getter只需解开返回匹配角色组合的进程。基本上,index
调用通过确定给定角色在角色数组中的位置,将其转换为整数。然后将2提升到该索引的幂次方,inject
简单地对结果求和
简言之
步骤1是通过使用&
来确定两个数组中的哪些值匹配,从而获取在角色中找到的角色
步骤2,为每个匹配的角色计算2**索引。Map返回这些值的数组
第3步,对数组求和以得到最终整数
其思想是为每个角色组合计算一个唯一的整数
getter只需解开进程,返回匹配的角色组合。1roles=
是与role
不同的方法名。2.Array#&:返回一个新数组,该数组包含两个数组共有的元素,没有重复项。(在鹤嘴锄中可以找到解释)“roles=是与role不同的方法名”,但第二个名为“roles”。那么您是说roles=()和roles是两个不同的方法名吗?如果是的话,我明白了。谢谢!对不起,打错了。我们说,roles
是一个getter,返回一个值,roles=()
是一个setter,修改值。编写roles=xyz
是Ruby的一个语法糖。实际上,如果roles是一个方法,那么等号就是方法名称的一部分。但是在var=xyz
中,如果var是一个变量,则等号只是赋值运算符。使用attr_accessor进行搜索将为您提供大量答案,比如Ruby的IRB非常适合自己尝试这些东西。为角色
和角色
创建虚拟值,并查看(角色和角色)
返回的内容。然后使用map
语句查看发生了什么。堆栈溢出非常倾向于一个问题。多个问题会冲淡和混淆可能的答案,所以尽量限制它们。一两个问题是可以解决的。六个人落水了roles=
是与role
不同的方法名。2.Array#&:返回一个新数组,该数组包含两个数组共有的元素,没有重复项。(在鹤嘴锄中可以找到解释)“roles=是与role不同的方法名”,但第二个名为“roles”。那么您是说roles=()和roles是两个不同的方法名吗?如果是的话,我明白了。谢谢!对不起,打错了。我们说,roles
是一个getter,返回一个值,roles=()
是一个setter,修改值。编写roles=xyz
是Ruby的一个语法糖。实际上,如果roles是一个方法,那么等号就是方法名称的一部分。但是在var=xyz
中,如果var是一个变量,则等号只是赋值运算符。使用attr_accessor进行搜索将为您提供大量答案,比如Ruby的IRB非常适合自己尝试这些东西。为角色
和角色
创建虚拟值,并查看(角色和角色)
返回的内容。然后使用map
语句查看发生了什么。堆栈溢出非常倾向于一个问题。多个问题会冲淡和混淆可能的答案,所以尽量限制它们。一两个问题是可以解决的。六个人落水了。
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