前情提要:

第六天我们透过Ruby代码练习public,protected和privatemethod时,发现冒号在前面的参数,:mydraft,:myspace,这些就是符号Symbol。在今天,我们就来解释Symbol吧!

Ruby经典面试题目#07
符号和字串有什么不同?What’s difference between symbol and string?

还记得我之前IT邦文章在Ruby on Rails项目例子中研究ruby的gem套件时,我发现这两者写法的功能是一样的:

:image_directory => 'tingsimage'
功能跟下者一样:

image_directory: 'tingsimage'
:冒号在前面,意思是符号

冒号在后面:,意思是给值

当时的发现,也是造就本篇文章想进一步探讨跑来跑去的小淘气冒号的原因。

比一比符号symbol字串string
意思有名字的符号物件指向字串物件的变数(leafor)
可不可变不可变immutable可变mutable
修改数组不可使用[]=方法可使用[]=方法修改字串
数组方法可使用[]取得数组内的字元可使用[]取得数组内的字元
字元方法可使用.length .upcase .downcase可使用.length .upcase .downcase
符号与字串转换符号转字串.to_s字串转符号.to_sym
我们来用代码实验看看:

tingsmessage =“This is my 7th article!”
tingsmessage这个变数,指向“This is my 7th article!”这个字串物件,变数的用意,就是让我的字串物件可以随时做调整。(明天我的message跑马灯就会换成第八天的招呼啰!)

如果我们把它变成::tingsmessage的符号呢?

它就会变成Symbol类别下的物件实体,名字叫做tingsmessage。

来用代码实作:

:tingsmessage这个符号,名字有12个字元,名字的第1个字母是t(数组位置[0]代表第1个),第2个字母是i…以此类推:

p:tingsmessage.length #12
p:tingsmessage.upcase #TINGSMESSAGE
p:tingsmessage[0] #t
p:tingsmessage[1] #i
而tingsmessage这个每天都会变来变去的变数,所指向的字串,一共有23个字元:(不信你数数看!)

tingsmessage =“This is my 7th article!”
p tingsmessage.length #23
p tingsmessage.upcase #THIS IS MY 7TH ARTICLE!
p tingsmessage[0] #t
p tingsmessage[1] #h
身为变数的好处就是可以任意修改。我们来试试改字母:

tingsmessage[1] =“Z”
p tingsmessage[1] #Z
p tingsmessage #TZis is my 7th article!
然而符号呢?

:tingsmessage[1]=“Z”
#undefined method `[]=' for:tingsmessage:Symbol(NoMethodError)
符号会找不到[]=方法修改字串。你可以想像,符号就如同我们在护照上的名字,是不能修改的。(因为已经被定义在国际间海关通用的数据库了。)

符号的好处是专一,它被写在程序里固定的內存位置,所以提取性能较高。我们可以用object_id的方法来实验:

3.times do
p:tingsmessage.object_id
end

印出结果:

1041308
1041308
1041308
而变来变去的变数每次都在內存里面,搬家到不同位置:

3.times do
p“tingsmessage”.object_id
end
印出结果:

46936214509440
46936214509260
46936214509180
在前述比较表,符号和字串之间可以互相转换的。

p:tingsmessage #:tingsmessage
p:tingsmessage.to_s # tingsmessage前面的冒号已经不见了!

p tingsmessage # TZis is my 7th article!
p tingsmessage.to_sym #:TZis is my 7th article!前面多一个冒号
何时使用符号Symbol
需要性能较高地传递参数时,例如在之前我们使用rails建立项目,餐厅名字、电话等…,这些数据库字段的名称是固定不变的:

def restaurant_params
params.require(:restaurant).permit(:name,:address,:phone,:website,:image)
end
回到文初一开头,我终于明白,

{:image_directory => 'tingsimage'}
其实是符号Symbol用在Hash(外围被大括号{}包着)里,是变数给值=>的意思。

今天超级比一比,就到这里结束啦(xcsjbj)!

比一比符号symbol字串string
意思有名字的符号物件指向字串物件的变数
可不可变不可变immutable可变mutable
修改数组不可使用[]=方法可使用[]=方法修改字串
数组方法可使用[]取得数组内的字元可使用[]取得数组内的字元
字元方法可使用.length .upcase .downcase可使用.length .upcase .downcase
符号与字串转换符号转字串.to_s字串转符号.to_sym
===

转载于:https://www.cnblogs.com/lannyQ-Q/p/10748686.html

Day07 - Ruby比一比:Symbol符号与String字串相关推荐

  1. 安装与配置windbg的symbol(符号)

    本篇是新手自己写的一点心得.建议新手看看.同时希望前辈多多指教. 写这篇的动机:在网上找了一上午的windbg配置符号教程.楞是没找到详细的,都讲的太 模糊而且互相抄袭.不适合新手看.终于靠自己的努力 ...

  2. 符号化Symbol(符号)体系

    符号化Symbol(符号)体系 ArcGIS Engine9.3为开发人员提供了32种符号,主要分为三大类符号MarkerSymbol(点符号). LineSymbol(线符号)和FillSymbol ...

  3. ES6的Class类和Symbol符号

    class类 ES6的class可以看作只是一个语法糖,新的class写法只是让对象原型的写法更加清晰.更像面向对象编程的语法 class 函数名{ constructor(){ // 构造器 }// ...

  4. 学计算机的符号,文字卦划计算机符号三大造字系统与思维力

    文字卦划计算机符号三大造字系统与思维力 侯 永 平 一."圭",最初是"首领的测量工具",逐步向"王权象征"转化. 二.传统的表意文字与表音 ...

  5. Ruby中的字符串与符号

    原文引用:http://blog.csdn.net/besfanfei/article/details/7966987 初学Ruby的时候,往往对字符串(String类)与符号(Symbol)这两种变 ...

  6. 【scala初学】scala symbol 符号 -3

    前面接触了scala符号,这会整体性的说说. scala符号主要分为四类:  1. 关键字,保留字 (Keywords/reserved symbols) 2. 自动导入 (Automatically ...

  7. ruby学习笔记(11)--symbol与hash参数

    symbol是啥就不深入的讨论了,只简单说说symbol的好处 ruby内部对于每个对象,都会有一个数字id用来标识并区分,可以用xxx.object_id来查看 puts "0001&qu ...

  8. Arcgis Engine 添加一个Symbol符号样式步骤

    1 public static void DrawPictureMarkerSymbol(IGlobe globe, String layerName) 2 { 3 //添加一个图层 4 ESRI.A ...

  9. ruby基础算法--使用比较符号对数组排序

    在 Ruby 中定义类 为了使用 Ruby 实现面向对象编程,您需要先学习如何在 Ruby 中创建对象和类. 在 Ruby 中,类总是以关键字 class 开始,后跟类的名称.类名的首字母应该大写. ...

最新文章

  1. php获取python的变量,PHPPython变量交换
  2. 解决:Xshell如何修改默认的登录用户,自动跳转到密码界面
  3. swing皮肤包 substance
  4. delphi 创建一个纯文本文件
  5. 电脑的ppt打不开计算机二级,ppt打不开怎么办?详细教您详细解决方法
  6. linux虚拟机界面菜单栏和任务栏不见了,已解决
  7. 2022软件测试常见抓包工具
  8. ACM在线模版-f-zyj
  9. 循环彩灯c语言程序,PLC彩灯实例,一个简单的顺序控制
  10. textarea 只显示内容,禁止输入或编辑
  11. 安卓 获取屏幕坐标(点击屏幕获取坐标)
  12. python人工智能开发语言_哪些编程语言最适合开发人工智能?
  13. 计算机学科评估排名2020,2020哲学学科评估排名结果出炉及评估结果
  14. Java 网络编程之swing图形化QQ聊天室
  15. 《pyMail.py》使用说明
  16. PUE的出现将在数据中心统一标准
  17. 批处理之一【删除文件和文件夹】
  18. 输电线路巡检机器人PPT_架空输电线路巡检机器人
  19. j-link “the connected j-link is defective“问题的解决
  20. 高端的网站设计 分享几个wordpress中文主题

热门文章

  1. 【linux基础】关于ARM板子使用O3编译选项优化
  2. JAVA-初步认识-第八章-继承-单继承和多重继承
  3. 简单实现顶部固定,中部自适应布局
  4. jQuery中的height()、innerheight()、outerheight()的区别总结
  5. ubuntu14.04 boost动态库找不到 libboost_system.so.1.58.0
  6. (原)直方图的相似性度量
  7. Java基础---网络编程
  8. Go学习笔记—并发高级
  9. java system.setproperties_在JAVA中 System.getProperty 和 System.setProperty 方法.
  10. 安卓APP_ 控件(10)—— ListView可上下滑动的列表(重要)与ViewHolder优化