Why don't more projects use Ruby Symbols instead of Strings?

前端 未结 4 1466
南笙
南笙 2020-12-17 18:29

When I first started reading about and learning ruby, I read something about the power of ruby symbols over strings: symbols are stored in memory only once, while strings ar

4条回答
  •  执笔经年
    2020-12-17 18:56

    The main difference is that multiple symbols representing a single value are identical whereas this is not true with strings. For example:

    irb(main):007:0> :test.object_id
    => 83618
    irb(main):008:0> :test.object_id
    => 83618
    irb(main):009:0> :test.object_id
    => 83618
    

    3 references to the symbol :test, all the same object.

    irb(main):010:0> "test".object_id
    => -605770378
    irb(main):011:0> "test".object_id
    => -605779298
    irb(main):012:0> "test".object_id
    => -605784948
    

    3 references to the string "test", all different objects.

    This means that using symbols can potentially save a good bit of memory depending on the application. It is also faster to compare symbols for equality since they are the same object, comparing identical strings is much slower since the string values need to be compared instead of just the object ids.

    I usually use strings for almost everything except things like hash keys where I really want a unique identifier, not a string

提交回复
热议问题