面试题答案
一键面试- 使用命名空间前缀:
- 在模块内定义常量时,使用模块名作为前缀。例如,在
MyModule
模块中定义常量MY_CONSTANT
,可写成MyModule::MY_CONSTANT
。这样即便其他模块或全局空间也有类似名字的常量,由于命名空间不同,不会产生冲突。
module MyModule MY_CONSTANT = 'value' end
- 在模块内定义常量时,使用模块名作为前缀。例如,在
- 局部常量使用:
- 如果常量仅在模块内的某个方法或特定代码块中使用,尽量定义为局部常量(以小写字母开头)。这样它的作用域仅限于该方法或代码块,不会与其他模块或全局常量冲突。
module MyModule def my_method my_local_const = 'local value' puts my_local_const end end
- 模块嵌套:
- 通过模块嵌套创建更细分的命名空间。例如,在
OuterModule
中嵌套InnerModule
,在InnerModule
中定义常量,其路径为OuterModule::InnerModule::MY_CONSTANT
,进一步降低命名冲突风险。
module OuterModule module InnerModule MY_CONSTANT = 'nested value' end end
- 通过模块嵌套创建更细分的命名空间。例如,在
- 使用
private_constant
:- 在Ruby 2.1及之后版本,可以使用
private_constant
方法将模块内的常量标记为私有。这样在模块外部无法直接访问该常量,减少了与外部常量冲突的可能性。
module MyModule MY_CONSTANT = 'value' private_constant :MY_CONSTANT end
- 在Ruby 2.1及之后版本,可以使用
- 代码审查和文档化:
- 在团队开发中,进行代码审查确保常量命名的一致性和避免潜在冲突。同时,对模块和常量进行文档化,清晰说明其用途,方便其他开发者了解,防止无意中定义冲突的常量。