这行Rails代码在做什么?

时间:2010-09-14 03:54:10

标签: ruby-on-rails

def role?(role)
    return !!self.roles.find_by_name(role.to_s.camelize)
end

你能帮我理解上面代码中发生了什么吗?我是Rails / Ruby的新手。

由于

2 个答案:

答案 0 :(得分:4)

这是否定(!)运算符重复两次。

请注意,只有评估为false(在布尔表达式中)的ruby对象本身为nilfalse

因此,

  1. some_role将为真,!some_role为假,!!some_role为真。
  2. nil为false,!nil为true且!!nil为false。
  3. 因此,这是检查find_by_name返回的角色是否为零的“聪明”方式。 (因此,是否存在具有此类名称的角色)

    我想,我不必告诉你这样做对可读性有害。您可以随时通过常规方式检查结果是否为零,例如result.nil?result == nil

答案 1 :(得分:1)

这更具可读性。不需要'自我'或'回归'。 '当下?'是'nil'的反面?所以不需要否定。

def role?(role)
  roles.find_by_name(role.to_s.camelize).present?
end