2013-07-22 79 views
0

我確信已經提出了這個問題,但我無法通過我的初步搜索找到它。以字符串格式執行操作

是否鼓勵在字符串初始化中執行操作?

> increment = 4 
=> 4 
    > "Incremented from #{increment} to #{increment += 1}" 
=> "Incremented from 4 to 5" 

回答

3

肯定不會,因爲這不是你讀代碼的時候認準的事 - 這 - 變化的東西。

它混淆了意圖,它掩蓋了含義。


比較:

url = "#{BASE_URL}/#{++request_sequence}" 

有:

request_sequence += 1 
url = "#{BASE_URL}/#{request_sequence}" 

如果你正在尋找,看看那裏的序列號是從哪裏來的,這是比較明顯?

我可以差不多住的第一個版本,但我很可能會選擇後者。我也可能做到這一點,而不是:

url = build_url(++request_sequence) 
+0

好的。謝謝你,但是,我需要在每次發出網絡請求時增加一個整數,所以我想我會將增量放入URL路徑創建中,而不是總是有一個額外的行。我猜它仍然很差,對吧? – RileyE

+0

@RileyE取決於;這與您提供的內容完全不同。我仍然不會這樣做,因爲它會以容易被忽略的方式重載字符串插值的語義。 –

+0

這是非常不同的,但你已經堅定地回答了我的問題,其他大多數情況。我想我只會創建將字符串初始化分開的習慣,並避免所有的混淆。謝謝。 – RileyE

2

在您的特定情況下,它可能是好的,但問題是,其中的變量應該發生操作的位置必須在同一變量的最後一個實例字符串,你不能總是確定。例如,假設(對於一些文體原因),你想要寫

"Incremented to #{...} from #{...}" 

然後,突然之間,你不能做你做了什麼。所以在插值過程中的操作高度依賴於字符串中特定的語句,並且降低了代碼的可維護性。

+1

+1,好點;它使得在各種情況下重構/重新排序更加困難。 –