def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
你能帮我理解上面的代码中发生了什么吗?我是Rails/Ruby的新手。Rails代码在做什么?
感谢
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
你能帮我理解上面的代码中发生了什么吗?我是Rails/Ruby的新手。Rails代码在做什么?
感谢
它的否定(!
)操作重复两次。
请注意,只有评估为false(布尔表达式)的ruby对象本身是nil
和false
本身。
因此,
some_role
将是真实的,!some_role
是假的,!!some_role
又是真实的。nil
为假,!nil
为真,!!nil
为假。所以,这是一个“聪明”的方法来检查角色是否从find_by_name
返回为零与否。 (因此是否存在与这样的名字的角色)
我想,我不必告诉你这样做对可读性不好。您可以随时通过正常方式检查结果是否为零,如result.nil?
或result == nil
。
这更具可读性。不需要'自我'或'回报'。 '当下?'与'无'相反吗?所以不需要否定。
def role?(role)
roles.find_by_name(role.to_s.camelize).present?
end
谢谢,不知道我明白了。你怎么能重写这个可读性,对于一个铁轨新手? – AnApprentice 2010-09-14 04:04:13
@nobosh我重构了一下。 – 2010-09-14 04:13:15
我很好奇,如果有意义的话,你如何能够将其改写得更清楚? thxs – AnApprentice 2010-09-14 04:24:25