ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 标识符 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 ~~~