辛星浅析ruby中的symbol

来源:互联网 发布:linux登陆root用户 编辑:程序博客网 时间:2024/05/17 08:22

     最近有位朋友问我如何理解ruby中的symbol,我也不知道如何解释,就在这里大致说一下自己的理解吧。

     第一点,symbol怎么表示。

        其实它和字符串的使用有点相似,它就是在字符串前面加上两个冒号即可,比如  :a   和 :"a"都是合法的symbol,而且它们指向的是同一个地方。

    第二点,ruby内部就大量的使用symbol。

      我们可以使用Symbol.all_symbols来查看当前都有哪些符号,就我目前来说就有四千多个,我们来个范例:

irb(main):002:0> Symbol.all_symbols.size=> 4481irb(main):003:0>

   第三点,为什么要使用symbol。

    这要从ruby的特性说起,因为ruby是一个完全的面向对象的语言,而且需要注意的是,如果我们声明两个"star"变量,它会分配两块内存,因此每声明一个字符串都会带来额外的内存开销,因此ruby就引入了symbol来节省内存开销。正如它的初衷一样,如果我们声明两个"star"的symbol,则只占用一块内存。而且类似需要占内存的东西还有很多,而ruby就可以把它们当做symbol来处理,这样,不论声明多少个,都只会占用同一块内存。

      从这个角度上讲,当我们使用字符串只是来标记一个事物的时候,比如我们只是用它来作为散列表的下标使用,就可以考虑使用symbol。而在rails这种框架中尤其明显,因为可能我们需要不断的在各个方法中传递数据,会产生很大的内存开销,这时使用symbol就是一个相当不错的方式。

      第四点,symbol与其他类型的关系。

      需要记住的是,symbol只是一个标记,而字符串是一个对象,因此很多在字符串中可以执行的操作,在symbol中是无法执行的,它只是起到一个占位符的作用。不过我们可以通过to_s方法把一个symbol升级成为一个字符串,但是它不允许被再赋值。

     暂时就先介绍到这里啦,可能思路有点混乱,之后再进行整理。

0 0
原创粉丝点击