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