为了账号安全,请及时绑定邮箱和手机立即绑定

如何理解Ruby中的符号

如何理解Ruby中的符号

catspeake 2019-08-31 10:55:29
尽管阅读了“ 理解Ruby符号 ”,但在使用符号时,我仍然对内存中数据的表示感到困惑。如果一个符号(其中两个包含在不同的对象中)存在于同一个内存位置,那么它们如何包含不同的值?我原本期望相同的内存位置包含相同的值。这是来自链接的引用:与字符串不同,同名的符号在ruby会话期间初始化并仅存在于内存中一次我不明白它如何设法区分同一内存位置中包含的值。考虑这个例子:patient1 = { :ruby => "red" }patient2 = { :ruby => "programming" }patient1.each_key {|key| puts key.object_id.to_s}3918094patient2.each_key {|key| puts key.object_id.to_s}3918094patient1并且patient2都是哈希,这很好。  :ruby然而是一个象征。如果我们要输出以下内容:patient1.each_key {|key| puts key.to_s}然后将输出什么?"red",还是"programming"?忘记哈希一秒钟,我认为符号是一个指向值的指针。我的问题是:我可以为符号分配值吗?符号只是指向具有值的变量的指针吗?如果符号是全局的,那是否意味着符号总是指向一个东西?
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

当我这样想时,我能够生成符号。Ruby字符串是一个具有大量方法和属性的对象。人们喜欢使用字符串作为键,当字符串用于键时,则不使用所有这些额外的方法。因此,他们制作符号,这些符号是删除了所有功能的字符串对象,除了它是一个好键所需要的。


只需将符号视为常量字符串即可。


查看完整回答
反对 回复 2019-08-31
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

符号:ruby不包含"red""programming"。符号:ruby只是符号:ruby。这是你的哈希值,patient1并且patient2每个包含这些值,在每种情况下有相同键指向。

想一想:如果你在圣诞节早晨进入起居室,看到两个带有标签的盒子,上面写着“Kezzer”。在它上面有袜子,另一个有煤。你不会感到困惑,并问“Kezzer”如何包含袜子和煤炭,即使它是同一个名字。因为名称不包含(蹩脚)礼物。它只是指着他们。同样,:ruby不包含哈希值中的值,它只是指向它们。


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 658 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信