Day07 - Ruby比一比:Symbol符号与String字串

前情提要:

第六天我们透过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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/275295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[知乎回答] 前端是否要学习 Node.js?

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12很多小伙伴都表示收获颇丰。一起学的大多数200行左右的Node.js源码。今天推荐这篇文章。(刚刚在写明天掘金要发的文章,差点忘记今天还没发文。在知乎上看…

shields 徽标_我的徽标素描过程

shields 徽标Sketching is arguably the most important part of my process when it comes to logo design. In the beginning of my design career, I would actually skip this step completely and go right to the computer. I’d find myself getting stuck and then goi…

VC编程心得

VC编程心得 开始: 声明变量要初始化; 指针变量申请空间后是不是为空(申请不成功); 过程: CREATE、OPEN了的东西赋给指针变量,要看指针变量是否为空; 指针变量在调用其方法之前&#…

叮咚,系统检测到 npm 有更新,原理揭秘!

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12本文来自V同学投稿的源码共读第六期笔记,写得很有趣。现在已经进行到第十期了。你或许经常看见 npm 更新的提示。npm 更新提示面试官可能也会问你,组件库…

ui设计未来十年前景_UI设计的10条诫命

ui设计未来十年前景重点 (Top highlight)The year is approximately 1,300 BC when Moses received the 10 UI design commandments from the almighty design gods. The list was comprised of best practices that only the most enlightened designers would be aware of.当…

w3ctech 2011 北京站(组图)

门前的牌子大厅一推低价技术书籍会场嘉宾席人渐渐到齐准备工作w3c中国区负责人 安琪 第一个演讲焦峰同学分享了浏览器兼容性的相关问题石川同学分享的是JQuery的相关内容摄影哥微博大屏幕,有亮点哦。。。MBP啊有木有~~~貘大现场提…

Linux设备驱动之IIO子系统——IIO框架及IIO数据结构

Linux设备驱动之IIO子系统——IIO框架及IIO数据结构由于需要对ADC进行驱动设计,因此学习了一下Linux驱动的IIO子系统。本文翻译自《Linux Device Drivers Development 》--John Madieu,本人水平有限,若有错误请大家指出。 IIO Framework 工业…

浏览器中的 ESM

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12早期的web应用非常简单,可以直接加载js的形式去实现。随着需求的越来越多,应用越做越大,需要模块化去管理项目中的js、css、图片等资源。这里…

理解面向连接和无连接协议之间的区别

理解面向连接和无连接协议之间的区别 网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。 面向连接和无连接指的都是协议。也就是说,这些术语指的并不是无理介质本身&#xff0c…

标记图标_标记您的图标

标记图标Not labeling your icons is the same as assuming that we are all fluent in ancient hieroglyphics. Are you? Can you just walk up to Cleopatras needle and read it like you could read a childrens book? Even emojis, our modern hieroglyphics dont mean …

找出无序数组中最小的k个数(top k问题)

2019独角兽企业重金招聘Python工程师标准>>> 给定一个无序的整型数组arr,找到其中最小的k个数 该题是互联网面试中十分高频的一道题,如果用普通的排序算法,排序之后自然可以得到最小的k个数,但时间复杂度高达O(NlogN)&…

你应该知道的 Node 基础知识

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 参与,已进行两个多月,大家一起交流学习,共同进步。源码共读学的多数是 Node.js ,今天分享一篇 Node.js 基础知识的文章。一. N…

C# 中数据缓存总结

在C#尝试了5种方法进行数据缓存,具体如下:(如有遗漏,错误欢迎大家指正,欢迎提建议。)1:Session方法:此方法是针对于每个用户来的,如果用户量比较大,那么建议不要采用此方法&#xff…

react 引入 mobx @babel/core: 7.2.2

为什么80%的码农都做不了架构师?>>> yarn add babel/plugin-proposal-class-propertiesyarn add babel/plugin-proposal-decorators"babel": {"plugins": [["babel/plugin-proposal-decorators", {"legacy": …

面试官问:怎么自动检测你使用的组件库有更新

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12本文来自V同学投稿的源码共读第六期笔记,写得很有趣。现在已经进行到第十期了。你或许经常看见 npm 更新的提示。npm 更新提示面试官可能也会问你,组件库…

设计模式完整备忘录

小言:这不是设计模式讲解型博文,以下将设计模式的概述、类图,代码示例,总结分每篇博文单独展示,现将其归类,便于以后翻阅,设计模式也不是一两个月学完了就能完全领悟,它只告诉我们几…

使用Microsoft Web Application Stress Tool对web进行压力测试

你的Web服务器和应用到底能够支持多少并发用户访问?在出现大量并发请求的情况下,软件会出现问题吗?这些问题靠通常的测试手段是无法解答的。本文介绍 了Microsoft为这个目的而提供的免费工具WAS及其用法。另外,本文介绍了一种Web应…

2021前端高频面试题整理,附答案

大家好,我是若川。最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12若川视野原意是若川的前端视野。但太长了就留下了四个字,不知道的以为关注的不是技术公众号。今天分享一篇慕课网精英讲师河畔一角的好文章~废话不多说,…

OO第二单元作业小结

总结性博客作业 第一次作业 (1)从多线程的协同和同步控制方面,分析和总结自己三次作业的设计策略。 第一次作业为单电梯傻瓜调度,可以采用生产者——消费者模型,是一个有一个生产者(标准输入电梯请求),一个…

dribbble加速vpn_关于Dribbble设计的几点思考

dribbble加速vpn重点 (Top highlight)I’d like to start with the following quote from Paul Adam’s “The Dribbbilisation of Design,” a powerful read that examines the superficiality of modern product design portfolios, often containing Dribbble posts that l…