首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有人可以为我解释ruby常量查找吗?

当然可以!Ruby常量查找是指在Ruby编程语言中,查找和访问常量的过程。常量是指在程序运行过程中不会改变的值,通常用大写字母和下划线组成的名称表示。

在Ruby中,常量查找遵循以下规则:

  1. 当前作用域:首先,Ruby解释器会在当前作用域查找常量,如果找到了,就返回该常量的值。
  2. 父作用域:如果在当前作用域找不到常量,Ruby解释器会在父作用域中查找,一直找到全局作用域。
  3. 如果在全局作用域中仍然找不到常量,Ruby解释器会在当前类或模块中查找常量,如果找到了,就返回该常量的值。
  4. 如果在当前类或模块中仍然找不到常量,Ruby解释器会在父类或模块中查找常量,一直找到Object类。
  5. 如果在Object类中仍然找不到常量,Ruby解释器会在全局作用域中查找常量,如果找到了,就返回该常量的值。
  6. 如果在全局作用域中仍然找不到常量,Ruby解释器会抛出一个NameError异常,表示常量未定义。

在Ruby常量查找中,可以使用const_get方法来查找常量,例如:

代码语言:ruby
复制
class MyClass
  CONSTANT = "Hello, world!"
end

puts MyClass.const_get(:CONSTANT) # 输出 "Hello, world!"

总之,Ruby常量查找是一个复杂的过程,涉及到作用域、类和模块等概念。在编写Ruby代码时,需要注意常量的定义和查找,以确保程序的正确性和可读性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Ruby和Python谁更可读?

现在我们只能从BlogPost 类中访问count,那我们可以设置类变量? 让我们试试看。 OMG,我们从来没有为这个变量定义过setter。 放到Python里怎么样?...那么有人就要问了,Ruby的对象更直接认为在 Ruby 中更容易看出类和实例属性之间的区别。 Setter 和 getter 允许您清楚地指定哪些属性是可读和可写的。...有人就对其进行了反驳。 精通的Python,直到现在仍然无法在Ruby中做任何有用的事情。其实,Python比Ruby更具可读性、易懂。...还有网友直接搬出了Ruby设计者Yukihiro Matsimuto曾说过的话, 没有让Ruby对于每个人来说都很完美,因为每个人感受不同。没有一种语言可以完美地适合所有人。...每次比较之后,当他们说Ruby更易读时,以为他们是在开玩笑,直到看到了多重继承这部分。 要说,Python和Ruby真正受欢迎程度,那绝对是Python获胜。

68820

闲话 | 代码的体格

不过他过于自大了,以为这只是像他那样牛逼的程序员才拥有的少数派观点;又或者说他过于悲观,以为程序员的世界还在拼代码的肌肉男臆想中。...面对日益膨胀的代码体格,Steve的呐喊是换语言,因为他是Ruby粉和Python粉的缘故,恨不得把所有系统都换成Ruby或者Python,要么就是Lisp。...你真以为换语言如换刀,宝刀在手,就能割去那些臃肿的代码,还代码一个苗条身材?——你以为是抽脂啊!Ruby也可以写出烂代码,Java也能写出漂亮的程序,关键不在于语言。...Unix大?大,而且必须大。...是明知必败?还是不可战胜?未战先怯,这场战争你已经败了。见到的诸多遗留系统,重复代码都是这样开始蔓延的。——时间,见鬼的时间,其实大多数时候它都是你举白旗时找来贴脸的遮羞布。

64880
  • Ruby和Python谁更可读?

    现在我们只能从BlogPost 类中访问count,那我们可以设置类变量? 让我们试试看。 OMG,我们从来没有为这个变量定义过setter。 放到Python里怎么样?...那么有人就要问了,Ruby的对象更直接认为在 Ruby 中更容易看出类和实例属性之间的区别。 Setter 和 getter 允许您清楚地指定哪些属性是可读和可写的。...有人就对其进行了反驳。 精通的Python,直到现在仍然无法在Ruby中做任何有用的事情。其实,Python比Ruby更具可读性、易懂。...还有网友直接搬出了Ruby设计者Yukihiro Matsimuto曾说过的话, 没有让Ruby对于每个人来说都很完美,因为每个人感受不同。没有一种语言可以完美地适合所有人。...每次比较之后,当他们说Ruby更易读时,以为他们是在开玩笑,直到看到了多重继承这部分。 要说,Python和Ruby真正受欢迎程度,那绝对是Python获胜。

    53120

    不使用 Ruby 的十个理由

    想要通过这篇文章解释这些年来非 Ruby 社区对于 Ruby 的一些看法,并且提醒人们以开放的心态来面对新的事物。敬请欣赏!...听说过 Engine Yard?没有?他们提供非常出色的企业级 Ruby 支持。 所谓的企业级支持是很久以前企业通过绑定用户销售昂贵的,可靠的,最新的技术来获得收入。但是你必须这么做?...让问你一个问题:你认为微软需要多久才能发现,修复,承认,并且发布一个IIS的安全补丁?再想想,你真的认为金钱驱动的垄断企业关心你 Web 应用的安全性?...在以开源代码为代表的技术创新时代,为了所谓的支持选择一个封闭的,垄断的技术,就是选择了落后所有人一步。...Ruby 没有很好的扩展性 这是很老的话题,要追溯到 Twitter 刚刚开始的时候。

    4K10

    java8以后字符串常量池的位置,以及元空间的探秘,使用VisualVM进行实战验证

    大家好,又见面了,是你们的朋友全栈君。   在网上看了很多博客,解释也比较多,关于字符串常量池的具体位置难以分辨谁真谁假。   ...对于jdk8以后的版本有人说字符串常量池在元空间中,也有人说字符串常量池存在堆中。   到底谁说的对?他们的说法有依据?...----   今天让我们来一起探讨一下这个问题 有人说字符串常量池在java堆中,有人常量池存在元空间中。...2、Java方法区与元空间 ---- 为了解决这个问题,下面我们通过Idea、VisualVm、JDK(用的是jdk14) 和 一段测试代码来探讨一下字符串常量池的位置 将下面代码粘贴到Idea中...jvm底层做的一件事情,移动了对象,再次查找对象时会找到移动后的那个对象(gc也会导致对象的移动,会将Eden区的对象移动到S0或S1,甚至可能移动到Old区。

    1.4K30

    如何让你的 JS 写得更漂亮

    下面分点说明: (1)定义变量的时候要指明类型,告诉JS解释器这个变量是什么数据类型的,而不要让解释器去猜,例如不好的写法: var num, 声明了三个变量,但其实没什么用,因为解释器不知道它们是什么类型的...有时候你会看到有人这样写: var age = 0; 也是利用了赋值表达式会返回一个值,在if里面赋值的同时用它的返回值做判断,然后else里面就已经有值了。上面的+号把字符串转成了整数。...,如果不去查一个那个函数的变量说明就不能够很快地意会到这些常量分别有什么用。...这些意义不明的常量就叫“魔数”。 所以最好还是给这些常量取一个名字,特别是在一些比较关键的地方。例如上面的代码改成: var naireType = "seller", 这样意义就很明显了。 6....用字符串的方式又不太好,所以这种情况用箭头函数也很方便: setTimeout(() => console.log("hi"), 3000) 箭头函数在C++/Java等其它语言里面叫做Lambda表达式,Ruby

    1.4K30

    代码洁癖系列(二):命名的艺术

    或者说看完有人明白这段代码要做什么先来说一下的问题: getThem是get什么?...list里存的是什么 keys指的是什么,为什么遍历它 常量”1“的意义是什么 这几个问题可能只有写这段代码的人才能解释(没错,就是写的)。...所以我来给大家解释一下,不过不想一一回答上面的问题,把代码重写一遍,看看还会不会有这样的问题。...另一点容易产生误导的是数字和字母相像的情况,比如,命名一个变量叫做O1,在编辑器里就很难分辨是O1还是01,如果写一个这样的表达式 O0=l1; 估计别人会以为发明了什么新的语言吧。...使用可以被搜索的名称 像我们在一开始的那段代码,为什么要把常量“1”写成OrderConstatn.PAID,不仅是为了可读,也是为了搜索,试想,如果你要找这段代码,去搜索数字1,会有多少结果?

    46320

    Ruby 和 Java 的基础语法比较

    Ruby ,Java 的文章应该很多,但是对比两种编程语言的基本语法使用的文章应该不多见,写这篇文章的目的主要是对自己近期几个月学习 Ruby 做总结和回顾,之前最熟悉的编程语言是 Java,个人认为合格的程序员应该掌握多门语言...,多学一门语言没有坏处,在解决问题的时候可以多些思路,在经历最近几个月的横向对比和使用感受,先抛个人结论,在个人项目或者小型团队,技术能力较强的团队推荐使用 Ruby, 在团队需要快速扩展和大型项目规划的情况下推荐...,Ruby 是一门很灵活也很优雅的动态语言,解释运行,有兴趣了解的同学可以点开 链接 查看维基百科的词条,Ruby 语法精炼,做相同的事情代码行数通常会比 Java 要短的多,使用 Ruby 写程序的的过程是非常舒服的...方法聊到这里,下来聊聊方法里的常量 常量对比 如果在 Java 和 Ruby 中定义常量,参考示例代码: // Java 中定义常量 public class Hello { // 常量必须是 static...在定义常量上的区别: 命名规则:Ruby 要求常量首字母大写,可用驼峰也全大写,Java 则要求常量全部大写,并且必须是 final static 修饰(Java 里的 final 代表不可变,可以声明类

    2.2K20

    Perl、PHP、Python、Java

    冒号说着画了张图表―― 引号听得仔细:“记得您开始是把这些语言划分为C族静态语言、非C族静态语言和动态语言三类的。” 冒号解释:“那是按语法来划分的,偏重理论;现在是按应用来划分,偏重实践。”...冒号补充道:“P也指Perl、Python,甚至Ruby。” 逗号调侃:“可惜Ruby的‘R’比‘P’多了一根尾巴。”...问号建议:“作为动态语言,它们的共性上节课已经谈了不少,能说说它们的个性?” “它们的个性极为鲜明:Perl凝练晦涩,Python优雅明晰,Ruby精巧灵动,PHP简明单纯。...叹号幽了一默:“见过Perl的代码,人文气息没闻出来,但我怀疑有乙醚气息――看一会就觉得晕晕乎乎的。” 众人大笑。 “有人仅用一行Perl代码就实现了RSA算法,你看了那还不得当场晕倒啊?”...Ruby的元编程能力特别强,也是它高度灵活的一种体现,但并不是所有人都喜欢这种风格。

    99810

    C语言中什么是常量表达式_c语言整型表达式

    大家好,又见面了,是你们的朋友全栈君。 常量表达式 c语言,整型表达式和常量表达式中都没有变量参与吧? 完整问题: 好评回答:表达式没有变量参与?...类似这样的问题,有人考过也拿来考过别人(蛮好玩的,大家也可以拿来问人玩),一般答案会是以下几种: 1。...,编译器在编译时直接计算容易理解,而”a” + “b” 这样的表达式,string是对象不是基本类型,编译器会把它当成常量表达式来优化?。...类似这样的问题,有人考过也拿来考过别人(蛮好玩的,大家也可以拿来问人玩),一般答案会是以下几种: 1。...,编译器在编译时直接计算容易理解,而”a” + “b” 这样的表达式,string是对象不是基本类型,编译器会把它当成常量表达式来优化?。

    1.2K30

    那么如何让你的 JS 写得更漂亮?

    下面分点说明: (1)定义变量的时候要指明类型,告诉JS解释器这个变量是什么数据类型的,而不要让解释器去猜,例如不好的写法: var num, str, obj; 声明了三个变量,但其实没什么用,因为解释器不知道它们是什么类型的...因为JS最终都会被解释成汇编的语言,汇编语言变量的类型肯定是要确定的,你把一个整型的改成了字符串,那解释器就得做一些额外的处理。...,如果不去查一个那个函数的变量说明就不能够很快地意会到这些常量分别有什么用。...这些意义不明的常量就叫“魔数”。 所以最好还是给这些常量取一个名字,特别是在一些比较关键的地方。...例如上面的代码改成: var naireType = "seller", dialogType = "sell", questionsCount = 5, reloadWindow = true

    1.4K00

    Python是如何怼翻其他编程语言而窜上宝座的

    有人说,“Python除了不会生孩子,什么都会。” 下视频?用Python;玩跳一跳?用Python跳到4999分;撩妹子?依然用Python;抢红包?...虽然Python没有PHP那么多引以为豪的框架,但个情况很快会改变(目前最好用的是Django和Flask)。...在编写脚本方面,Python的脚本是真正的脚本,能够被解释器执行,而且使用Python更容易编写跨平台的脚本,甚至不需要重新编译。...Python vs Ruby from Cleveroad Python和Ruby都是面向对象的语言,都是动态和灵活的。二者的主要区别在于他们解决问题的方式。...超模君说了这么多,估计大家都知道“Python大法好”了,我们…… 模友A:等等,超模君,还有一个疑问,我们真的有必要去学这个?Python真的适合我吗?

    1K80

    如何让你的 JS 代码写得更漂亮

    因为JS最终都会被解释成汇编的语言,汇编语言变量的类型肯定是要确定的,你把一个整型的改成了字符串,那解释器就得做一些额外的处理。...有时候你会看到有人这样写: var age =0; if((age =+form.age.value)>=18){ console.log("你是成年人"); }else{ consoe.log...,如果不去查一个那个函数的变量说明就不能够很快地意会到这些常量分别有什么用。...这些意义不明的常量就叫“魔数”。 所以最好还是给这些常量取一个名字,特别是在一些比较关键的地方。例如上面的代码改成: 这样意义就很明显了。 6....用字符串的方式又不太好,所以这种情况用箭头函数也很方便: setTimeout(()=> console.log("hi"),3000) 箭头函数在C++/Java等其它语言里面叫做Lambda表达式,Ruby

    2K20

    字符串常量

    “不就一个?”三妹不假思索地回答。 “不,两个!”...直接否定了三妹的答案,“使用 new 关键字创建一个字符串对象时,Java 虚拟机会先在字符串常量池中查找有没有‘二哥’这个字符串对象,如果有,就不会在字符串常量池中创建‘二哥’这个对象了,直接在堆中创建一个...通常情况下,我们会采用双引号的方式来创建字符串对象,而不是通过 new 关键字的方式: String s = "三妹"; 当执行 String s = "三妹" 时,Java 虚拟机会先在字符串常量池中查找有没有...Java 8 之后,移除了永久代,字符串常量池就移到了堆中。 ? “哥,能再简单给我解释一下方法区,永久代和元空间的概念?有点模糊。”三妹说。 说,“可以呀。”...PS:点击「阅读原文」直达《教妹学Java》专栏的 GitHub 开源地址,记得 star 哦!

    50540

    Martin Fowler是重构之父

    在《Refactoring: Ruby Edition》的Preface中,Fowler就说: ?...专门写文章说此事,目的是要批评春节期间质疑了"重构之父"的宣传之后看到一种论调: 这么较真有意思,Fowler对重构的推广贡献巨大,是不是"重构之父"重要吗?...当年方舟子质疑唐骏的学历造假,也有人洗地"学历重要吗" ——既然不重要,你造假学历干嘛? 不批评始作俑者,反而来批评质疑者,这个三观正确?...可以接受的论调是: (1)对不起,我们不清楚重构的历史,误以为Fowler是"重构之父",写错了。...************** 去年,受邀做了一个推荐。实事求是写了一小段话。前两天也发现,某机构也精妙地把这一小段话给修改了。 原话如下: ? 宣传语如下: ?

    96030

    《Effective-Ruby》读书笔记

    《Effictive Ruby》就是一本致力于让你在第二阶段更加深入和全面的了解 Ruby,编写出更具可读性、可维护性代码的书,下面就着一些认为的重点和自己的思考来进行一些精简和说明 第一章:让自己熟悉...= 5 end Defaults.freeze 第 5 条:留意运行时警告 使用命令行选项 ”-w“ 来运行 Ruby 解释器以启用编译时和运行时的警告。...(如果 Person 类中没有找到的话,Ruby 会继续向上直到到达 BasicObject) 但是如果方法在查找过程中直到类树的根节点仍然没有找到匹配的办法,那么它将重新从起点开始查找,不过这一次会查找...Ruby 程序员,那么请告诉,下面这样的模式在代码中出现的频率是多少?...如果年轻代对象在第一阶段的标记中存活了下来,那么 Ruby 的分代式垃圾收集器就把它们提升为年老代。也就是说,他们依然是访问的。

    4K60

    如何思考面向对象

    好吧,已经听见质疑的尖叫了,那么,就来给你解释一下为什么。首先我们可以达成一个共识,全局变量和全局状态是魔鬼。...如果你觉得前面说的静态方法的话会没什么争论的,那好,认为静态方法就应该返回一个常量,因为没有全局状态量(时间和随机数,这些都是全局状态量,所以不能算进去的,对象必须有不同的实例,但是对象图的连线是一致的...实际上,并不是说-3 非得是一个对象,但是有的编译器认可这件事情,比如 Ruby。如果你有一堆参数的话,不妨选择一个对方法影响最大的参数来做这个方法的调用者。...现在来看看这样的问题:User 对象应该知道 Ldap ?实际这里存在有两个问题: (1)User 应该具备一个引用类型的属性 Ldap ?...的经验是每个人都想写某天可以重用的代码,但是那一天从未到来,并且那么做的人会陷入代码的纠缠之中,所以在实际需要重用之前,不要太过考虑这件事情(开发一个重用的库另说)。

    20210

    为什么Lisp语言如此先进?(译文)

    至于Ruby,如果回到1975年,你声称它是一种Lisp方言,没有人会反对。 编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平。...认为,当前最新潮的编程语言,只是实现了他在1958年的设想而已。 这怎么可能呢?计算机技术的发展,不是日新月异?1958年的技术,怎么可能超过今天的水平呢? 让告诉你原因。...代码使用符号和常量组成的树形表示法(notation)。   9. 无论什么时候,整个语言都是可用的。Lisp并不真正区分读取期、编译期和运行期。...有时不采用最尖端的技术,不也是一种明智的选择?这么多人使用主流编程语言,这本身不也说明那些语言有可取之处? 另一方面,选择哪一种编程语言,许多项目是无所谓的,反正不同的语言都能完成工作。...附录:编程能力 为了解释所说的语言编程能力不一样,请考虑下面的问题。

    1.2K60

    利用 PHP 名称空间编写可读且维护的代码

    “Conan 是榜样。” 如果在餐桌上说这句话,儿子会以为说的是游戏 “野蛮人柯南”,而我妻子会以为说的是脱口秀主持人 Conan O'Brien。这种上下文混淆在 IT 中称为名称冲突。...当然,PHP 要解决的冲突的名称并不是人名,而是类、函数和常量的名称。 本文解释为什么应该考虑在项目中使用名称空间。...需要名称空间? PHP 语言的优点之一是简单。如果您是 PHP 新手,名称空间只是您需要了解的一个概念。...您在其他语言中使用过名称空间(或包等相似的功能),比如 Java™、Ruby 或 Python 语言。 如果您独自开发一个相当小的应用程序,可能不需要名称空间。...在解释两个都名为 Conan 的类为什么可以同时存在之前,先要指出两点。首先,使用断言证实代码符合预期。第二,做了您绝对不应该做的事情:在一个源代码文件中声明多个名称空间。

    1K20
    领券