【问题标题】:What is the difference bewtween var = 55 and :var = 55 in Ruby? [closed]Ruby 中的 var = 55 和 :var = 55 有什么区别? [关闭]
【发布时间】:2014-09-18 04:26:06
【问题描述】:

我刚刚在 Ruby 中观看 this video ion Symbols。在视频中似乎说分配一个变量会创建一个同名符号并将其指向分配中的相应对象。

我理解 as String 和 Symbol 之间的区别,因为每次 as Symbols 总是引用同一个对象时,字符串都会创建唯一的对象。但是我很难理解变量和同名符号之间的区别。

例如,如何:

var = 55

不同于:

:var = 55

【问题讨论】:

  • :var = 55 这不是有效的 Ruby 表达式。
  • 您不能为符号分配任何内容。这与分配 4 = 5 一样有意义
  • 那么当他们在视频中谈论“指向”一个对象的符号时,这是什么意思?
  • 该视频似乎暗示,当我们创建一个变量时,我们会创建一个具有名称、ID 和它指向的对象的符号,对吗?
  • @Cu1ture - 这个演示文稿帮助我了解了 ruby​​ 在幕后的工作原理:rubyinside.com/…。它很好地解释了 ruby​​ 如何管理其内存以及真正的变量。

标签: ruby string variables symbols


【解决方案1】:

在 Ruby 中,您可以将数据存储在 Hash 对象中...... Hash 对象是键值对的集合

star_info = {:name = > "Johnny Depp", :birth_year => 1963, :birth_country = "USA" }

所以哈希star_info 包含有关电影明星的信息。它存储为键(我正在使用符号,但我不必这样做;这样做很常见且有效)和值(与此特定电影明星相关的相关键的值)。

为了得到电影明星的名字,我可以这样做......

p star_info[:name]
=> "Johnny Depp"

因此,尽管符号本质上并不像变量那样“存储”数据,但它可以用作指向存储在某个 Hash 对象中的数据的指针。

要成功检索与符号相关的数据,您必须同时拥有符号(键)和 Hash 对象(存储键/值对的对象)。

编辑

刚刚查看了您引用的视频,就它而言,这是一个很好的视频...您可能会感到困惑的是,他将变量称为“内部符号”,并且基于此建立概念模型并没有帮助.符号是表示...符号:west 代表概念:west,并不指向任何其他对象。

【讨论】:

    【解决方案2】:

    Symbol 就像 Ruby 中的一切一样,是一个对象,所以它是内存中的一个结构,具有方法、属性。 变量是指向对象的指针(引用) - 它存储对象所在的内存地址。

    所以这个var = :something 是一个有效的语法,它创建一个符号实例:something 和变量var 引用(指向)这个实例。

    在本文中了解有关符号和参考的更多信息:Ruby for Admins: Strings and Symbols

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2013-08-10
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多