每次在比較單個值和比較多個值之間切換時,必須切換變量和值。可以在Ruby的Object類中添加一個方便的方法嗎?
return if params[:controller] == 'users'
return if ['users', 'sessions', 'admin'].include? params[:controller].
以下反轉語法Array#include
?
class Object
def in?(arr)
arr.include? self
end
def not_in?(arr)
!(arr.include? self)
end
end
現在你可能會說:
return if params[:controller] == 'users'
return if params[:controller].in? ['users', 'sessions', 'admin']
有沒有更好/更安全的方式做到這一點,而不與Object類玩?
毫無疑問,有更好更安全的方法,但是您使用的Rails已經是Monkey Patch Heaven了,那麼爲什麼不修改Object呢? :) –
你可以寫第一個'return if''users']。include? PARAMS [:控制器]'。只有稍微難看。 (我剛剛注意到你在重寫時使用'in?'而不是'include?',所以我刪除了更改後的語法警告..) – sarnold
爲什麼要這麼做?你已經有了相當短的表達來做同樣的事情。你也以一種沒有道理的方式來顛倒責任:你告訴一個對象看看它是否在某個其他對象中,而不是詢問一個對象是否包含對象。一般來說,如果你不得不對對象進行猴子修補,那麼你做錯了。 –