1

令我难以置信的是,我不明白为什么某些(大多数)字符串例程是给出结果的函数,而某些字符串例程是更改原始字符串的过程。

S2 := Copy(S1,3,2);

从 S1 将第 3 个位置开始的 2 个字符复制到 S2。

Delete(S,3,2);

从 S 中删除从第 3 个位置开始的 2 个字符。

我会认为让 Delete (和其他一些)表现得像大多数其他字符串例程一样更一致,所以你可以写:

S2 := Delete(S1,3,2);

为什么不是这样?

4

2 回答 2

4

原因就在名字里。

Copy是一个函数,因为它应该创建一个副本。的过程版本Copy需要一个额外的参数,因为当已经有源时,目标会去哪里?

Delete是一个过程,因为它应该从字符串中删除字符。对于Delete返回删除操作结果的函数版本,源应该变成什么?您正在对其调用删除操作:它不能保持不变。

类比;将其与过程TRect.Offset和功能进行比较TRect.CenterPoint对实体Offset 执行操作,其中读取实体的属性CenterPoint

于 2013-09-20T21:27:51.117 回答
1

首先,copy() 不是一个函数。它是内在的。

其次它的工作是复制,而在 delete() 修改当前字符串的情况下是一个选项,它是删除,而不是复制和删除。

这种差异很重要,因为 Delphi 不受 Java 和 C# 等不可变字符串的影响。

在 ansistring 之前,返回函数总是至少添加一个副本,这在当时的计算机上很明显。ansistring case afaik 仅在内联时更好。

于 2013-09-20T19:12:50.777 回答