def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
你能帮我理解上面代码中发生了什么吗?我是Rails / Ruby的新手。
由于
答案 0 :(得分:4)
这是否定(!
)运算符重复两次。
请注意,只有评估为false(在布尔表达式中)的ruby对象本身为nil
和false
。
因此,
some_role
将为真,!some_role
为假,!!some_role
为真。nil
为false,!nil
为true且!!nil
为false。因此,这是检查find_by_name
返回的角色是否为零的“聪明”方式。 (因此,是否存在具有此类名称的角色)
我想,我不必告诉你这样做对可读性有害。您可以随时通过常规方式检查结果是否为零,例如result.nil?
或result == nil
。
答案 1 :(得分:1)
这更具可读性。不需要'自我'或'回归'。 '当下?'是'nil'的反面?所以不需要否定。
def role?(role)
roles.find_by_name(role.to_s.camelize).present?
end