【问题标题】:Why one would use a symbol in attr_accessor and not a string?为什么要在 attr_accessor 中使用符号而不是字符串?
【发布时间】:2013-11-14 17:40:58
【问题描述】:

那么我们为什么要在 Ruby 中这样做:

attr_accessor :price

代替:

attr_accessor 'price'

我读过 Symbols 类似于 Strings,但它们是不可变的。但我不明白为什么我们在做 attr_accessor、attr_reader 时要使用它。我的意思是,有什么优势?

【问题讨论】:

  • 符号是不可变的,但这不是使用它们的主要原因。符号只有一个实例;同一符号的所有出现都指向变量空间中的同一点,因此在具有大量实例变量的大型应用程序中可以显着节省内存。

标签: ruby


【解决方案1】:

这是正确的做法。 Symbol 是一种数据类型,其目的是专门表示“名称”或“标签”的概念。在这里,您使用它来传递要生成的一对方法的名称。 Symbol 在这种情况下只是正确的数据类型。为方便起见,这些方法也采用Strings。

【讨论】:

    【解决方案2】:

    与字符串不同,符号是固定的,因此您可以避免创建大量(可能)重复的字符串对象。在多个地方使用相同的:foo 符号不会以恒定速率消耗更多内存,除非对'foo' 执行相同操作

    【讨论】:

    • 通常,您不需要在多个地方使用相同的:foo 符号。当你使用它们时,你会拨打obj.foo这样的电话。
    • 虽然 attr_accessor 等类型元编程不太可能出现这种情况,但仍有可能发生,请在其他地方说obj.public_method(:foo)
    • 这与这个问题无关。
    【解决方案3】:

    偏好。符号需要较少的输入,一些 IDE 会用漂亮的颜色突出显示它们。

    【讨论】:

    • 还有documentation specifies,应该给出一个符号。
    • @Jordan 更好的答案。
    • 不仅是IDE,还有很多其他的编辑器,包括vi。我认为@Jordan 做到了。
    • 符号如何花费更少的精力?通过将键数减少一?这甚至不值得考虑。和 IDE 颜色?一些 IDE 和我使用的所有编辑器也为字符串提供了漂亮的颜色,但这不是在 attr_accessor 中使用符号的理由。
    猜你喜欢
    • 2011-08-16
    • 2018-09-15
    • 2011-11-24
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多