我假设我的问题可能已经存在于SO知识库中,而我却找不到它.在这种情况下,请引导我到原点并投票将其作为副本关闭.它是关于将数组参数传递给过程.
以下案例简单,直观且有效:
procedure MyProc(const A: array of ShortString);
begin
//
end
Run Code Online (Sandbox Code Playgroud)
现在我可以调用MyProc并直接将字符串传递给它:
MyProc(['no', 'trump', 'please']);
Run Code Online (Sandbox Code Playgroud)
现在如果我声明一种ShortString数组怎么办?
type
TMyArray = array of ShortString;
procedure MyProc(const A: TMyArray);
begin
//
end
Run Code Online (Sandbox Code Playgroud)
有没有办法直接执行数组类型的MyProc传递参数?即使用与上述相同的程序调用.
+奖金问题:
type TMyRecord = record
param, value: ShortString
end;
procedure MyProc(const R: TMyRecord);
begin
//
end
Run Code Online (Sandbox Code Playgroud)
是否有任何技术来调用过程并传递类型记录的值?像(伪代码)的东西:
MyProc((TMyRecord.param='aaa', TMyRecord.value='bbb'));
Run Code Online (Sandbox Code Playgroud)
我问的原因是:我不想声明变量并进行设置.相反,我想直接传递数组/记录值作为过程参数.
我们遇到了CSS样式表,其中font-size参数的一些值被定义为font-size:181.25%16px.
单独地,这些是很好理解的:相对(缩放到29px)和绝对值,但将它们混合在一起......?出于什么目的?
我简要阅读了最新的W3C规范,但我找不到这种编码形式.Google Chrome完全验证了它并正确显示了包含单个标记的文档:<p style="font-size:181.25%16px">Test</p>
注意:要参考一下这个CSS代码单元(字体大小划分)?是不明确的,因为在参考文章中font: 9pt/18px Tahoma;意味着只是一种简短的写作方式font-size和line-height一起.
我的问题是关于调试内存泄漏,这似乎是一场噩梦.
在我的应用程序中有一个简单的类派生自TObject.该类的所有对象都存储在派生自TObjectList以下类的类的集合/列表中:
type
TOffer = class(TObject)
Item: string;
Price: string;
Id: string;
end;
TOffers = class(TObjectList<TOffer>)
protected
procedure SetOffer(I: Integer; AOffer: TOffer);
function GetOffer(I: Integer): TOffer;
public
property Offers[I: Integer]: TOffer read GetOffer write SetOffer
end;
Run Code Online (Sandbox Code Playgroud)
使用场景:
爬虫下载商品,解析商品并保存到对象集合.这种方法似乎很方便,因为我可以稍后引用这些对象(填充网格/列表,将它们写入文件等)
问题是正确处理对象以避免内存泄漏.该应用程序在启动时分配~4Mb内存,但在处理后~12k提供它吞噬32Mb.在过程完成后由未正确处理的对象/变量引起的泄漏.
ReportMemoryLeaksOnShutdown 显示可怕的数字,但关键是 - 我不知道在哪里看,以及如何正确调试该死的东西.
另一个例子是var MyString: string需要适当处置的变量!! 这对我来说很有见地:)我认为每个过程/函数都会自动管理超出范围的变量的垃圾收集.
商品列表由函数创建:
function GetOffersList: TOffers;
begin
Result := TOffers.Create;
while not rs.EOF do
begin
Offer := TOffer.Create;
try
// here come collected offer attributes as variables of …Run Code Online (Sandbox Code Playgroud)