ruby 代码
- class A
- Const = "ok"
- class B
- Const = "ko"
- p Const.object_id
- end
- p Const.object_id
- end
如果你在irb中敲入上面的程序,可以发现,两次的object_id是不同的,虽然我们在B中可以看到上层目录中定义的Const,而且可以打印出它的值,但是想要给C赋值就是另外一回事了,ruby并不会认为这是在给上层目录中的C赋值,而是认为这是在目录A::B中新建了一个常量C,因为常量是不允许多次赋值的,这样自然不难理解为什么两者的object_id不一样了。
让我们多做一点儿尝试:
ruby 代码
- class A
- Const = "ok"
- def meth
- Const = "ko"
- end
- end
当我们在方法中试图改变一个常量的值得时候,程序会报错,这是显然的结果,但是从这里可以看出来,虽然在变量的可视区域上方法和类没有什么区别,但是在对变量的操作时,两者的区别还是很明显的。
让我们再来点儿其他好玩儿的尝试:
ruby 代码
- class A
- Const = "ok"
- class B
- p A::Const
- Const = "ko"
- p Const.object_id
- end
- p Const.object_id
- end
-
- class A
- Const = "ok"
- class B
- Const = "ko"
- end
- p A::B::Const.object_id
- p A::Const.object_id
- end
可以看到,我们可以通过命名空间(或者叫目录结构)来访问任意目录下定义的常量,当不指定目录结构的时候,首先从当前目录开始寻找,然后依次向上。
分享到:
相关推荐
Ruby中不具备嵌套作用域(即在内部作用域,可以看到外部作用域的)的特点,它的作用域是截然分开的,一旦进入一个新的作用域,原先的绑定会被替换为一组新的绑定。 程序会在三个地方关闭前一个作用域,同时打开一个新...
Proc是对块及其context(局部变量的作用域以及栈框架)进行对象化处理之后得到的过程对象。您可以像使用无名函数那样来使用Proc,但它不会导入局部变量的作用域(可以把动态局部变量用作Proc局部变量)。 在下例中,正...
3. PHP中的变量作用域是什么?请说明在PHP中的变量作用域规则。 4. PHP中如何进行错误处理(Error Handling)?请说明在PHP中的错误处理机制。 5. 什么是PHP中的超全局变量(Superglobals)?请列举几个常用的PHP超...
3.2 变量的作用域和生命期 3.2.1 全局变量 3.2.2 局部变量 3.3 变量的初始值 3.3.1 全局变量的初始值 3.3.2 局部变量的初始值 3.4 与函数有关的优化 3.4.1 函数调用与程序优化 3.4.2 变量存储优化 3.5 编写多文件...
3.5 标识名和变量的作用域..................................................................................................19 3.6 类库......................................................................
3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 运算符概述 4.8 算术表达式 4.9 关系表达式 ...
3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 运算符概述 4.8 算术表达式 4.9 关系表达式 ...
3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 运算符概述 4.8 算术表达式 4.9 关系表达式 ...
3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 运算符概述 4.8 算术表达式 4.9 关系表达式 ...
6.7.1 局部变量的作用域 89 6.7.2 局部变量的初始化 90 6.8 this预定义对象引用 92 6.9 擅用系统已有的类 94 6.9.1 Java中的Date类 94 6.9.2 Java中的GregorianCalendar类 96 6.9.3 擅用系统已有类的...
3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问表达式 63 4.5 调用表达式 64 4.6 对象创建表达式 64 4.7 运算符概述 65 4.8 ...
3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问表达式 63 4.5 调用表达式 64 4.6 对象创建表达式 64 4.7 运算符概述 65 4.8 ...
augeasproviders:Puppet的基于Augeas...班级augeasproviders :: instances 此类允许使用类的参数或顶级作用域变量定义此模块提供的类型。 注意:类的参数优先于顶级变量。 将sysctl条目net.ipv4.ip_forward设置为1 :
“闭包”一词来源于以下两者的结合:要执行的代码块(由于自由变量的存在,相关变量引用没有释放)和为自由变量提供绑定的计算环境(作用域)。在Scheme、CommonLisp、Smalltalk、Groovy、JavaScript、Ruby和Python...
13.6 作用域内私有和作用域内受保护可见性 306 13.7 对可见性的想法 312 13.8 本章回顾与下一章提要 313 第14章 Scala类型系统(I) 314 14.1 参数化类型 315 14.1.1 变异标记 315 14.1.2 类型...
设置以下环境变量: SENTRY_DSN :(可选)用于异常跟踪的 API密钥。 SSH_PRIV_KEY :SSH私钥,已授权其写入要向其中推送数据的github项目。 SSH_PUB_KEY :对应于SSH_PRIV_KEY 。 GIT_HOST :要写入的github...
例如,它提供了一种作用域机制,我个人认为比Ruby的@和@@清晰多了,这可能是习惯使然吧,但它确实和C++、Java中的this很相似。 然而,self总是有令我困扰的地方,我以前在这里说过—我曾幻想能在Python3中这些能得以...
与作用域 175 14.2 GSP标签库 175 14.2.1 常用的内置标签 176 14.2.2 开发自定义标签 179 14.3 Grails对Ajax的支持 182 14.4 本章小结 184 第15章 实现Web Service 185 15.1 REST风格的Web Service 185 15.1.1 什么...
动态作用域及正则匹配效应... 295 匹配修改的特殊变量... 299 qr/…/运算符与regex对象... 303 构建和使用regex对象... 303 探究regex对象... 305 用regex对象提高效率... 306 Match运算符... 306 Match的...