有道理,这是其中一种可能的方法。唯一的缺点是,常量会污染全局命名空间。
我通常喜欢的方法是将它们定义在应用程序命名空间内部。
假设您的应用程序名称为Fooapp
,那么您已经由Rails定义了一个Fooapp
模块(请参见config/application
)。
我通常会在lib
中创建一个fooapp.rb
文件,如下所示:
module Fooapp
end
我将内部的常量降低了。同时确保在application.rb
文件的底部要求它。
require 'fooapp'
在这种情况下,文件的懒加载将不起作用,因为Fooapp
模块已经被定义。
当常量的数量足够多时,可以将它们移到一个单独的文件中,例如/lib/fooapp/constants.rb
。最后这一步只是简单的改进,将所有常量分组到一个简单的地方(我倾向于大量使用常量来替换魔法数字或进行优化,尽管Ruby 2.1冰冻字符串字面值的改进可能会让我删除几个常量)。
还有一点,如果正则表达式特定于一个模型,您可以将其存储在模型本身内并创建一个模型方法。
class User
REGEXP_EMAIL = /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
REGEXP_BITMESSAGE = /\ABM-[123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ]{32,34}\z/
def contact_is_email?
contact =~ REGEXP_EMAIL
end
end
"
。 - falsetruif @user.contact.match(REGEXP_EMAIL)
- hwnd[123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ]
看起来很糟糕。你可能会错过l
,I
,O
(或者这是故意的?)。除非缺少的字符是有意为之,否则可以简写为[1-9a-zA-Z]
。 - nhahtdh