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.pswp.cn/news/275295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275295.shtml
英文地址,請注明出處:http://en.pswp.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…