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字符串‘’与“”的区别

    创建字符串对象除了可以使用“”(双引号)外,也可以使用‘’(单引号)。我们试着把之前程序的双引号换成单引号,看一下效果。 程序原封不动地输出单引号里面的内容。也就是说,像\n这样的特殊字符不经过转义,程序会原封不动地直接输出。但也有例外,例如在字符串里想嵌入\与单引号时,还是需要在之前加上\。

    Ruby经验 2020年12月9日
    01.1K0
  • Ruby中的对象标识object_id

    对象标识(ID)用来判断对象的同一性。 通过object_id判断字符串对象与符号对象是不是同一个对象。字符串对象不是同一个对象,符号对象是同一个对象。

    Ruby经验 2020年7月30日
    01.4K0
  • rbenv和ruby-build以及rbenv-gemset的介绍

    1.rbenv是什么?ruby-build是什么?rbenv-gemset是什么? rbenv是ruby版本管理工具,相当于rvm的管理功能,并不支持rvm的ruby安装功能和gemset功能,需要安装ruby-build插件来安装ruby,安装rbenv-gemset插件来支持gemset功能,ruby-build相…

    Ruby经验 2020年8月10日
    01.3K0

发表回复

登录后才能评论