我在我目前的Go代碼一些地方看起來像這樣:避免過多的轉換
i := int(math.Floor(float64(len(l)/4)))
冗長,似乎因爲一些功能型的簽名像在math.Floor
必要的,但它可以被簡化?
我在我目前的Go代碼一些地方看起來像這樣:避免過多的轉換
i := int(math.Floor(float64(len(l)/4)))
冗長,似乎因爲一些功能型的簽名像在math.Floor
必要的,但它可以被簡化?
一般來說,Go的嚴格類型會導致一些冗長的表達式。詳盡並不意味着口吃。類型轉換可以做有用的事情,並且明確說明這些有用的東西是很有價值的。
簡化的訣竅是不寫不需要的類型轉換,因此您需要參考文檔(如語言定義)。
在您的具體情況下,您需要知道len()返回int,並且值>> 0.您需要知道4是一個常量,它將在此表達式中使用int類型,並且你需要知道整數除法將返回整數商數,在這種情況下,它將是一個非負整數,實際上就是你想要的答案。
i := len(l)/4
這種情況很簡單。
我不是100%確定Go如何處理整數除法和整數轉換,但它通常是通過截斷。因此,假設LEN(L)是一個int
i:=len(l)/4
否則i:= int(len(l))/4
或i:=int(len(l)/4)
應該工作,與第一個是理論上略微大於第二快。
是的,謝謝你的回覆。這是一個簡單的例子,但是例如像'math.Max'這樣的表達式會讓人討厭。 – GiantSquid
「您需要知道4是一個常量,它將在此表達式中使用int類型。」我很好奇,你怎麼知道的,因爲常量沒有特定的類型? – kristianp