剛開始學(xué)習(xí)Ruby的時(shí)候,對(duì)于String 和 Symbol這兩種類型有點(diǎn)疑惑,深入學(xué)習(xí)后記錄他們這兩者之間的區(qū)別。
1. 字符串和符號(hào),都是Ruby中表示文本的方式
p "dog".to_sym #=> :dog
p :dog.to_s #=> "dog"
2. 相同的符號(hào)是一個(gè)對(duì)象,相同的字符并不一定是一個(gè)對(duì)象
p "dog".equal?("dog") #=> false
p :dog.equal?(:dog) #=> true
符號(hào)是不可變的,不能對(duì)符號(hào)進(jìn)行修改。兩個(gè)相同的符號(hào)一定是同一個(gè)對(duì)象。但是兩個(gè)內(nèi)容的字符串就不一定是同一個(gè)對(duì)象了。
3. 處理符號(hào)相比字符串,占用更少的資源 ,性能更優(yōu)
因?yàn)樽址兞勘仨毦哂懈鞣N修改其內(nèi)容的功能,所以字符串的維護(hù)和處理的開銷就很大。但是有些時(shí)候,我們并不需要修改和處理創(chuàng)建的文本信息,這個(gè)時(shí)候就應(yīng)該用符號(hào),減少資源開銷。