原文引用:http://blog.csdn.net/besfanfei/article/details/7966987

初学Ruby的时候,往往对字符串(String类)与符号(Symbol)这两种变量类型分不清楚,其实,我们大可不必纠缠这两种变量类型的内部实现,只需记住它们的特点和区别就可以了:

1. 字符串和符号,都是Ruby中表示文本的方式

不管字符串变量也好,符号变量也好,都是用来表示文本的,它们之间,也可以互相转换(通过to_sym和to_s):

  1. >>  "book".to_sym
  2. => :book
  3. >>  :track.to_s
  4. => "track"

2. 相同的符号是一个对象,相同的字符并不一定是一个对象

这就是符号和字符串最大的差别,符号是不可变的,不能对一个符号进行修改。所以说,两个看起来相同的符号一定是一个对象,但是说两个看起来一样的字符串是一个对象,就不对了。

这里,我们用 equal? 方法检验这一点,当两个对象相同时,equal? 返回true,反之是false:

  1. >>  :book.equal?(:book)
  2. => true
  3. >>  "book".equal?("book")
  4. => false

3. 处理符号相比字符串,占用更少的资源

这也就是为什么有些时候我们要使用符号的原因,由于字符串变量必须具有各种修改其内容的功能,所以字符串的维护和处理的开销就很大,但是有些时候,我们并不需要修改和处理创建的文本信息,这个时候用符号再好不过了。

比较典型的用法,就是在Rails中,用符号来指代散列中的参数名称:

  1. <% for article in @articles -%>
  2. <%= link_to article.title,
  3. :controller => "article",
  4. :action      => "show",
  5. :id             => article.id   %>
  6. <% end -%>

反之,如果我们把 :controller 写成"controller",把 :action 写成"action",吧 :id 写成"id",每一个循环都要创建3个新的字符对象,但是我们又不需要对这些字符串进行修改操作,白白添加了很多处理器开销,而且写成符号的形式更加简 练,可以更容易分别出参数和值,何乐而不为呢。

转载于:https://www.cnblogs.com/dami520/archive/2013/06/14/3136980.html

Ruby中的字符串与符号相关推荐

  1. ruby字符串截取字符串_如何在Ruby中附加字符串?

    ruby字符串截取字符串 There are multiple ways to do the required but we will study about three of them. 有多种方法 ...

  2. linux sed 替换符号,linux sed 批量替换文件中的字符串或符号

    BLE 蓝牙协议栈开发 1.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1) 2.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2) 3.由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3) 关 ...

  3. 如何在Ruby中使用数组方法

    介绍 (Introduction) Arrays let you represent lists of data in your programs. Once you have data in an ...

  4. ruby中的符号_Ruby中的凡人和不朽符号

    ruby中的符号 In this article, we're going to explore the following topics: 在本文中,我们将探讨以下主题: symbols are u ...

  5. 如何检查字符串是否包含Ruby中的子字符串?

    我有一个字符串变量,内容如下: varMessage = "hi/thsid/sdfhsjdf/dfjsd/sdjfsdn\n""/my/name/is/balaji.s ...

  6. NLP:以周杰伦的《Mojito》歌词为例字符串切分之清除一段由列表组成的字符串文本中的所有杂乱符号

    NLP:以周杰伦的<Mojito>歌词为例字符串切分之清除一段由列表组成的字符串文本中的所有杂乱符号 目录 以周杰伦的<Mojito>歌词为例字符串切分之清除一段由列表组成的字 ...

  7. python中定义元组的符号_python中得元组和字符串详解,有这么一篇文章就够了

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:咸鱼学Python ( 想要学习Python?Pyth ...

  8. java 字符串中去除汉字和符号

    **在项目中遇到需要将某一个字符串字段中的汉字和符号去除掉的需求,以下为简单的实现和自己的一点理解,在这记录一下.** @Testpublic void getIdByString() {String ...

  9. java去除符号和字母_java 字符串中去除 数字 字母 符号N*1*senten.Length=M*M

    字符串中去除 数字 字母 符号 String str = "今天1@天%.气^64很?不?错.心情6666很好....."; String str1 = str.replaceAl ...

最新文章

  1. ros web_video_server的使用及Python获取实时画面
  2. Hibernate学习笔记(一)----针对不同的数据库不同的配置
  3. PHP_Memcache函数详解
  4. 零基础代理神器allproxy
  5. makefile中的函数
  6. 网页title上面添加图片
  7. 【普及组模拟赛】作业
  8. [设计模式原则]第五回:迪米特原则
  9. Php7 mongodb explain,【代码片-1】 php7 mongoDB 简单封装
  10. 有图形化显示,继承WebControl类
  11. OpenResty缓存
  12. python编写程序判断数据类型_python中如何判断一个变量的数据类型
  13. 解决Charles Response 中文乱码
  14. java中的onresume_java – 直接onResume()调用的替代方法
  15. 实现迭代服务器端和客户端
  16. android recovery 3e,【记录】尝试用ODIN去恢复启动界面是Android system recovery 3e的I9100G...
  17. 魅族16t无法点击计算机传输,魅族16T如何打开USB调试模式连接电脑 魅族16T一键开启游戏模式方法教程...
  18. Android Tag-Cloud (云标签) 效果
  19. 空间计量经济学(4)---空间滞后与空间杜宾误差模型
  20. 诺威达K2201s/全志p9处理器/线刷救砖包

热门文章

  1. mybatis接口中的方法重载_MyBatis底层实现原理: 动态代理的运用
  2. 随机抽取题目程序java_分析并实现一个简单的抽人程序
  3. Qt实践录:一些界面设计的记录示例
  4. 【kafka】WARN Attempting to send response via channel for which there is no open connection
  5. 【Elasticsearch】Elasticsearch 的异步搜索原理解析 _async_search
  6. 【ElasticSearch】Es 源码之 AnalysisModule 源码解读
  7. 【Flink】Flink 运行 实时修改消费组offset
  8. Spark的动态资源分配ExecutorAllocationManager
  9. 【Flink】A Typical reason for AskTimeOutException is that the recipientactor
  10. mac vim 无颜色 增加颜色