Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Inconsistent array constructors

2 views
Skip to first unread message

Skybuck Flying

unread,
Jan 15, 2023, 5:09:32 PM1/15/23
to
The [1,2,3 ]
in
vSomething := [ 1, 2, 3 ];
or
SomeProcedure( [1,2,3] );

Can mean different things depending on:

1. If it's a dynamic array
Thinks it's an array.
2. If it's a open array parameter
2.1 Inside the function
Thinks it's a set.
vs
2.2 Outside the function
Thinks it's an array.
2.3 Using it inside open array function not allowed...

2.1 is inconsistent with rest of language design.

Little bit fuzzy/messy example but it illustrates it:

// helper routine, example:
// FillArray( Values, [ 1, 2, 3] );
procedure FillArray( var VarValues : array of integer; const ConstValues : array of integer );
var
vIndex : integer;
begin
for vIndex := 0 to Length(ConstValues)-1 do
begin
VarValues[vIndex] := ConstValues[vIndex];
end;
end;

procedure FillWithLethalInternetValuesV2( var Values : array of integer );
var
vArray : array of integer;
begin
// strangely enough Delphi thinks this is a set !?! LOL WTF. maybe because 1,2,3 is part of an integer set ?
Values := [ 1, 2, 3 ]; // Problem with Delphi language, Delphi thinks it's a SET instead of an ARRAY ?!?!

// ^ inconsistent design between open array parameters and sets...
FillArray( Values, [ 1, 2, 3] ); // open array parameter, also known as open array constructor syntax.

// even more confusing is that nowadays dynamic array constructors are also possible:
vArray := [ 1, 2, 3 ];
end;

Bye for now,
Skybuck.
0 new messages