标识符
Ruby的标识符用于命名局部变量、实例变量、类变量、全局变量、常量、方法以及块。标识符的命名有一套固有规则。
命名规则
- 必须以字母、数字或下划线为开头,长度只受硬件内存大小限制
- Ruby的保留字不得用作标识符的命名。
Ruby中标识符的分类
变量
- 本地变量, 也叫局部变量,比如 「name」。
- 实例变量,以@为开头的变量,为实例对象所用,比如「@name」。
- 类实例变量, 也是以@为开头的变量,为类所用,比如「@name」。
- 类变量, 以@@为开头的变量,也是为类所用,比如「@@name」。
- 全局变量,全局范围内都可以被使用的变量,类似于类变量,但是写法不同,比如「$name」
- 常量, 以大写字母为开头,比如「Klass,Node」。Ruby中常量的值是可以被修改的,只是出一个警告。
方法与块
方法和块的命名规则,和本地变量一样,如果是两个单词以上,用下划线分割。比如「get_name」
Chef中变量的命名
贴一段Chef的源码,大家来感受一下:
class Chef
class Node
extend Forwardable
def_delegators :attributes, :keys, :each_key, :each_value, :key?, :has_key?
attr_accessor :recipe_list, :run_state, :override_runlist
# RunContext will set itself as run_context via this setter when
# initialized. This is needed so DSL::IncludeAttribute (in particular,
# #include_recipe) can access the run_context to determine if an attributes
# file has been seen yet.
#--
# TODO: This is a pretty ugly way to solve that problem.
attr_accessor :run_context
include Chef::Mixin::FromFile
include Chef::DSL::IncludeAttribute
include Chef::DSL::PlatformIntrospection
include Chef::Mixin::ParamsValidate
# Create a new Chef::Node object.
def initialize
@name = nil
@chef_environment = '_default'
@primary_runlist = Chef::RunList.new
@override_runlist = Chef::RunList.new
@attributes = Chef::Node::Attribute.new({}, {}, {}, {})
@run_state = {}
end
# ...
end