Ruby中符号(symbol)的深入认识

符号(symbol)可以理解为轻量的字符串,但符号不是轻量字符串,也不是字符串。符号是对象,一般用作标示符使用。很多 Ruby 初学者都在想办法搞清楚什么是符号和怎么使用符号。

符号最好的描述是身份证。一个符号代表了它是“谁”,而不是代表了它是“什么”。 打开 irb 来看一看他们的区别:

irb(main):001:0> :george.object_id == :george.object_id
=> true
irb(main):002:0> "george".object_id == "george".object_id
=> false
irb(main):003:0>

object_id 函数返回的是对象的身份标识。如果两个对象有相同的 object_id, 那么他们就是相同的(指向同一个内存地址)。 可以看出,当符号在使用过一次后,任何相同字符的符号都会在内存中指向同一个对象地址。 也就是说任何相同字符的符号的 object_id 都是相同的。

(“george”)的字符串的 object_id 并不相同,这表示他们在内存种指向不同对象地址。 每当您创建一个新的字符串的时候,Ruby 会在内存中为它分配新的空间。

当您犹豫该用符号还是字符串的时候,想一下究竟字符的标识更重要(比如 Hash key)还是内容更重要 (比如前面例子里的 “george” )。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/rubye/1514.html

(0)
上一篇 2020年7月28日 01:00
下一篇 2020年7月28日 21:13

相关推荐

  • Ruby语言的鸭子类型(Duck Typing)

    Java语言是一种具有静态类型系统的语言,而Ruby并不像Java这样,Ruby的类不是类型,在Ruby中,对象类型更多是根据对象能做什么决定的,它被称为Duck Typing,如果对象能够像鸭子那样行走,像鸭子那样呱呱叫的话,那么解释器会很高兴地把它当成鸭子来对待。

    Ruby经验 2021年6月30日
    03930
  • Ruby中nil值与NilClass类的介绍

    在Ruby开发中,我们会遇到nil这个返回值,比如下面: 既然在Ruby中一切为对象,那么nil值也应该是对象,是属于哪个类呢? nil是一个特殊的值,表示对象不存在。如果碰到false和nil ,则会认为是”假”,除此之外的都认为是”真”。

    Ruby经验 2020年7月26日
    08450
  • Rails中<%…% >与<%=…%>的区别

    这两种嵌入式Ruby的区别在于<%…% >仅执行里面的Ruby代码,而<%=…%>除了执行里面的Ruby代码并将结果输出到HTML。

    Ruby经验 2021年4月27日
    05450

发表评论

登录后才能评论