理解 ruby中的Symbol(冒号:)、String

开头:

Symbol是唯一且不会变动的识别名称,用冒号 (:) 开头,:name  :"name" 都是合法的Symbol。 Symbol只是一个标记。

Symbol与字符串的区别就是 Symbol类型的同名变量 指向同一个地址,节约了内存。

例子一:

比如用生活中的例子来说明:Symbol

Symbol就像我们用水杯(物理地址:1240)装水,可以装饮用水、饮料(数据)等(物理地址:1800)。用1240 标记数据的位置1800

String 就像一次性纸杯装水,用不同(纸杯)地址标记(水)数据位置。

是不是用相同的水杯装不同的资源更节约一些呢。

例子二:

代码示例如下

a={:name=>"zgl"}
a.object_id  #1280
a.each_key{|key| puts key.object_id} #71068  
a.each_value{|value| puts value.object_id} #1300
a[:name].object_id #1300

b= {:name=>"text"}
b.object_id  #1320
b.each_key{|key| puts key.object_id} # 71068 
b.each_value{|value| puts value.object_id} #1340
b[:name].object_id #1340

#可以发现
a.each_key{|key| puts key.object_id} #71068  
b.each_key{|key| puts key.object_id} # 71068  
#他们指向了同一个地址

#我们用字符串试试呢
c ={"name"=>"zgl"}
c.each_key{|key| puts key.object_id} #1360

d = {"name":"text"}
d.each_key{|key| puts key.object_id} #71068

所以Symbol对于字符串 更节约内存,ruby中时常更喜欢使用 Symbol 

无论何时,只要你是重用一个单词来反复代表其他东西,标志就能派上用场,就像用杯子装水。

不管是散列中的一个键,还是Http查询中的一个方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值