我是Go的初学者和Java开发人员。 我目前在与big.Rat合作。
我需要得到老鼠 n 的Abs
,为此我必须写出
n.Abs(n)
或类似big.Rat{}.Abs(n)
为什么不只提供n.Abs()
之类的内容?
还是我在某个地方出错?
答案 0 :(得分:2)
Go的big
包在功能签名方面与内存分配有关。 big.Rat
由两个big.Int
组成,每个uint
包含一个int
数组。与big.Int
(32或64位整数)不同,n.Abs()
必须根据其值动态分配。对于较大的值,这意味着数组中有更多元素。
您建议的功能签名n
意味着必须为此操作分配与n
相同大小的新数组。实际上,我们经常遇到这样的情况,即不再需要原始的Abs
,因此我们可以重用其现有的内存。为此,big.Rat
函数采用了指向现有n
的指针,该指针可能是n.Abs()
本身。现在,该实现可以重用内存。现在,调用方可以完全控制要用于这些操作的内存。
这可能不是所有用例的最佳API,实际上,如果您只想对几个大数字进行快速计算,则在具有千兆字节RAM的计算机上,您可能更喜欢let searchInput = document.querySelector('.search-input');
let suggestionsPanel = document.querySelector('.suggestions')
searchInput.addEventListener('keyup', function() {
const input = searchInput.value;
suggestionsPanel.innerHTML = input;
});
版本,但如果您使用大量数字进行数值昂贵的计算,则必须能够控制您的内存。试想一下,例如在Raspberry上进行一些图像处理,在此情况下,可用内存会限制您的使用。在这种情况下,现有的API可以使您效率更高。