【发布时间】:2015-02-26 10:42:42
【问题描述】:
我们可以很容易地从许多著名的存储库中找到这种风格,例如 rack、rails 等。
PATH_INFO = 'PATH_INFO'.freeze
REQUEST_METHOD = 'REQUEST_METHOD'.freeze
SCRIPT_NAME = 'SCRIPT_NAME'.freeze
QUERY_STRING = 'QUERY_STRING'.freeze
CACHE_CONTROL = 'Cache-Control'.freeze
CONTENT_LENGTH = 'Content-Length'.freeze
CONTENT_TYPE = 'Content-Type'.freeze
HTTP_IF_MODIFIED_SINCE = 'HTTP_IF_MODIFIED_SINCE'.freeze
HTTP_IF_NONE_MATCH = 'HTTP_IF_NONE_MATCH'.freeze
HTTP_IF_NONE_MATCH = 'HTTP_IF_NONE_MATCH'.freeze
我想知道为什么这些常量字符串会被冻结。由于它们都是常量,因此应该只有一个实例。当然,我们可以将 "foo".freeze 放在某个地方来引用同一个单例实例,但是人们通常会写成像 HTTP_IF_MODIFIED_SINCE 这样的字面变量名。
所以在我看来,尽管使用#freeze 并没有什么区别,那么为什么人们要冻结常量呢?
【问题讨论】:
-
阻止人们意外变异它们?
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rack