功能:
// Mod sets z to the modulus x%y for y != 0 and returns z.
// If y == 0, a division-by-zero run-time panic occurs.
// Mod implements Euclidean modulus (unlike Go); see DivMod for more details.
func (z *Int) Mod(x, y *Int) *Int {
如果我想在條件中使用一個函式,我需要創建一個臨時變數以避免被覆寫:
var tmp big.Int
for tmp.Mod(x, y).Cmp(z) == 0 {
- 這樣做有什么實際好處嗎?
- 我可以在不使用臨時變數的情況下重寫我的代碼嗎?
uj5u.com熱心網友回復:
通常接收器用于結果,因此您可以選擇重用現有big.Int實體。如果您不想重用現有的,您可以為結果創建一個新的并呼叫該方法。
這在包檔案中提到math/big:
通過始終通過接收器傳遞結果值,可以更好地控制記憶體使用。不必為每個結果分配新記憶體,操作可以重用為結果值分配的空間,并在行程中用新結果覆寫該值。
結果也會回傳,因此您可以鏈接呼叫。包檔案中也提到了這一點:
例如,(*Int).Add 的引數被命名為 x 和 y,并且因為接收者指定了結果目的地,所以它被稱為 z:
func (z *Int) Add(x, y *Int) *Int這種形式的方法通常也回傳傳入的接收者,以啟用簡單的呼叫鏈。
所以你可以做這樣的事情:
one := big.NewInt(1)
two := big.NewInt(2)
three := big.NewInt(3)
sum := new(big.Int)
sum.Add(sum, one).Add(sum, two).Add(sum, three)
fmt.Println(sum)
哪個將輸出(在Go Playground上嘗試):
6
如果您不想為操作的結果重用現有值,您可以像這樣分配一個新值:
one := big.NewInt(1)
two := big.NewInt(2)
fmt.Println(new(big.Int).Add(one, two))
列印出來3(在Go Playground上試試)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/352552.html
標籤:走
下一篇:轉換命令列引數以用作結構欄位
