2013-10-03 59 views
2

繼下一代Ruby 2.1的開發之後,我已閱讀了可能會添加的功能,以便開發人員可以指定文字字符串應該從「凍結」開始。爲什麼字面字符串應該開始凍結? (Ruby 2.1)

的語法如下(注意結尾f):

str = "imfrozen"f # str receives a frozen string 

other Ruby documentation/wiki我讀過這個功能提供了以下好處:

這使得VM使用每次都有相同的String對象,並且 可能用於跨許多文件的相同凍結字符串。它也 顯然提供了凍結字符串的所有不變性保證。

我的問題是:

  • 這樣做有什麼好處呢?
  • 當像這樣的功能提供價值時,真實世界的例子是什麼?
  • 這與symbol有什麼不同?

謝謝

+3

我現在的理解是,這些新的凍結字符串是一樣的符號,但也可以是垃圾收集。 –

回答

7

假設你有這樣的代碼

array_that_is_very_long.each do |e| 
    if e == "foo" 
    ... 
    end 
end 

在這段代碼中,每次迭代在array_that_is_very_long,一個新的字符串"foo"創建(並拋出),這是巨大的資源浪費。目前,您可以通過克服這個問題:

Foo = "foo" 
array_that_is_very_long.each do |e| 
    if e == Foo 
    ... 
    end 
end 

所提出的語法使得這更容易做,因爲這樣:

array_that_is_very_long.each do |e| 
    if e == "foo"f 
    ... 
    end 
end 
+0

非常感謝。這些代碼示例非常清楚如何使用它。雖然有什麼好處?較小的內存佔用?執行速度更快?你爲什麼不使用符號? – CharlesHorse

+0

如果'e'是一個字符串,沒有理由將其轉換爲符號,並將其作爲符號進行比較,除非在代碼的其他部分特別使用它。 – sawa

相關問題