Ruby 的 string 較恰當的寫法

NickWarm
Nickwarm Journey
Published in
2 min readJun 27, 2018
“Close-up of the definition of the word “focus” in a French dictionary” by Romain Vignes on Unsplash

初學者會學到,Ruby 的 string可以用 + 串接的寫法,i.e:

"a" + "b" + "c"

會生成string "abc" ,但假若我們考慮到效能,這樣寫是不恰當的

Ruby每個object都是獨一無二的,儘管是相同內容的string,依然是不同的object,i.e:

[7] pry(main)> "foo"
=> "foo"
[8] pry(main)> "bar"
=> "bar"
[9] pry(main)> "foo" + "bar"
=> "foobar"
[10] pry(main)> "foo".object_id
=> 70235812221440
[11] pry(main)> "foo".object_id
=> 70235812140620

可以看到一樣是 foo,但是它的object_id是不同的,所以他是完全不同的object

讓我們再來看看 ”foo" + "bar" 串出來的string

[12] pry(main)> ("foo" + "bar").object_id
=> 70235811209120
[13] pry(main)> ("foo" + "bar").object_id
=> 70235769122160

可以看到 "foo" + "bar" 是串出一個新的string object

假如我們要依照 user id 給 redis 塞 key時會用在 sring 裡取得變數的做法

"string_#{user.id}"

延伸思考:hash 的 key

我們知道 hash 的 key 可以用 string 與 symbol,而我們普遍都用symbol

這是因為,Symbol object 是唯一且獨立的,舉例來說

[14] pry(main)> :foo
=> :foo
[15] pry(main)> :foo.object_id
=> 4123868
[16] pry(main)> :foo.object_id
=> 4123868

--

--

NickWarm
Nickwarm Journey

Rubyist。Nicholas aka Nick. Experienced in Ruby, Rails. I like to share the experiences what I learned.