10.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/ruby/rubyhigh/1514.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注