我在我目前的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