# 标识符
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
~~~
- 序
- Chapter 1: 初识Chef
- 一些背景
- Chef vs Puppet
- Chapter 2: Chef应用
- Chef架构
- Chef能做什么
- Chef组件
- Chef环境安装
- chef-server
- opscode-chef
- chef-solo
- Chef实战
- 实战前的必修理论
- 使用Chef
- Chapter 3: Ruby基础
- 对象与方法
- 标识符
- 类与模块
- 数据类型
- 真与假
- 控制语句
- 代码块
- Chapter 4: Chef源码架构
- Rubygems与gem
- bundler
- Chef源码组织
- Chapter 5: Rails基础
- Rails是什么
- MVC架构
- Restful
- Rails组成与项目结构
- Chapter 6: Chef Server WebUI
- Chef Server Webui组织结构
- Chef Rest API
- 参考