Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

DynArray in procedure   Найти похожие ветки 

 
Чародей ©   (2006-02-18 18:09) [0]

Как передать в процедуру в качестве параметра динамический массив и получить возможность изменять его размер. В следующем коде ошибка Incompotible types.
procedure TP(a:array of longint);
begin
SetLength(a,2);
end;
Почему?


 
Джо ©   (2006-02-18 18:10) [1]

type
 TLongArray = array of Longint;

procedure TP(a:TLongArray);
begin
 SetLength(a,2);
end;


 
Джо ©   (2006-02-18 18:11) [2]

> Почему?

Потому, что в твоем варианте кода это не динамический массив. Это так называемый открытый массив, open array.


 
Palladin ©   (2006-02-18 18:13) [3]

Type
TArrayOfLongint=Array of Longint;

procedure TP(var a:TArrayOfLongint);
begin
SetLength(a,2);
end;


 
Джо ©   (2006-02-18 18:18) [4]

> [3] Palladin ©   (18.02.06 18:13)

var или не var — на сей счет можно гадать, так как прямых указаний на необходимость этого не было ;)


 
Чародей ©   (2006-02-18 18:19) [5]

<off>
нда массив не катит нам нужен МАССИВ.
</off>
Спасибо


 
Джо ©   (2006-02-18 18:21) [6]

>Чародей ©  
> нда массив не катит нам нужен МАССИВ.


?


 
Palladin ©   (2006-02-18 18:25) [7]


> Джо ©   (18.02.06 18:18) [4]

ну в принципе да...


> нда массив не катит нам нужен МАССИВ.

можно и такое

type
TLongARRAY = ARRAY of Longint;

procedure TP(a:TLongARRAY);
begin
SetLength(a,2);
end;


пойдет?


 
Чародей ©   (2006-02-18 18:31) [8]


> type
>  TLongArray = array of Longint;

Я никогда не использовал такие вещи, потому что считаю, что это тавтология. И смысла в таких конструкциях не вижу.


 
Джо ©   (2006-02-18 18:33) [9]

> [8] Чародей ©   (18.02.06 18:31)
>
> > type
> >  TLongArray = array of Longint;
>
> Я никогда не использовал такие вещи, потому что считаю,
> что это тавтология.

А компилятор считает иначе.

>И смысла в таких конструкциях не вижу.
Меняй работу.


 
Palladin ©   (2006-02-18 18:42) [10]


> И смысла в таких конструкциях не вижу.

тогда почитай справку по open array, думаю после этого увидишь...


 
McSimm ©   (2006-02-18 18:43) [11]

> [8] Чародей ©
Возможно кому-то и интересно узнать что вы считаете тафталогией и в чем вы не видите смысла. Но все же не стоит писать это здесь - тут люди в основном учатся, вдруг по неопытности подумают, что вы что-то умное написали.
:)


 
Чародей ©   (2006-02-18 20:36) [12]


> McSimm ©   (18.02.06 18:43) [11]

> тафталогией

таВтОлогия

Прочитал про open array всё что нашел в справке, и отличие от dynamic я вроде понял, но не нашел ни одного примера, где динамические массивы не могли бы быть использованы, по отношению к открытым.


 
Джо ©   (2006-02-18 20:44) [13]

> [12] Чародей ©   (18.02.06 20:36)
> Прочитал про open array всё что нашел в справке, и отличие
> от dynamic я вроде понял, но не нашел ни одного примера,
> где динамические массивы не могли бы быть использованы,
> по отношению к открытым.

Еще раз и по-русски, пожалуйста.


 
Чародей ©   (2006-02-18 20:51) [14]


> Еще раз и по-русски, пожалуйста.

???
-------
Покажите хоть один пример где использование открытого массива имеет хоть какие-то преимущества, перед использованием там же динамического массива


 
Palladin ©   (2006-02-18 20:51) [15]

тогда простой вопрос: в чем оно заключается? отличие?


 
Джо ©   (2006-02-18 21:01) [16]

> [14] Чародей ©   (18.02.06 20:51)
> Покажите хоть один пример где использование открытого массива
> имеет хоть какие-то преимущества, перед использованием там
> же динамического массива


type
TLongArray = array of Longint;

procedure TP(a:TLongArray);
begin
...
end;

...
TP ([10,20,30]);



 
Джо ©   (2006-02-18 21:02) [17]

> [16] Джо ©   (18.02.06 21:01)

Не то объявление скопипастил. Демонстрировал open array, т.е:
procedure TP(a:array of longint);


 
Palladin ©   (2006-02-18 21:08) [18]


> имеет хоть какие-то преимущества

ты не понял еще что ли, для тебя дело не в приемуществе, а в синтаксисе, если ты объявляешь как procedure a(b:array of integer) то b считается open array, а не dynamic array


 
Palladin ©   (2006-02-18 21:12) [19]

соответственно твое высказывание о таВтОлогии является абсолютно некорректным, в рамках форума, который все таки посвящен Delphi, и может направить юные умы в сторону неверного мировозрения применительно к тому же Delphi, о чем и сказал тебе McSimm :)


 
Чародей ©   (2006-02-18 21:14) [20]

Т.е. преимущества зключаются только в возможности использования констант. Но ведь это скорее исключение из правил чем правило, так как в реальных ситуациях данные в дольшинстве случаев получаются динамически.


 
McSimm ©   (2006-02-18 21:37) [21]

Примеров много, например функция Format().


 
Чародей ©   (2006-02-18 21:49) [22]

Вобщем смысл понял, всем большое спасибо за помощь.
(хотя насчет тавтологии я останусь при своем мнении, можно было как-то иначе сделать различия :)


 
Джо ©   (2006-02-18 22:08) [23]

> [20] Чародей ©   (18.02.06 21:14)
> Т.е. преимущества зключаются только в возможности использования
> констант. Но ведь это скорее исключение из правил чем правило,
> так как в реальных ситуациях данные в дольшинстве случаев
> получаются динамически.

Нет, опять неправильно понял. Синтаксис позволяет использовать НЕ только константы.


 
Джо ©   (2006-02-18 22:08) [24]

> [22] Чародей ©   (18.02.06 21:49)
> (хотя насчет тавтологии я останусь при своем мнении, можно
> было как-то иначе сделать различия :)

За чем дело стало? Напиши собственный компилятор без указанных недостатков.


 
Джо ©   (2006-02-18 22:10) [25]

Мое мнение таково, что, прежде чем выражать свои претензии к синтаксису языка, необходимо выучить хотя бы основы этого языка. А то смешно выглядит, ей Богу.



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.03 c
15-1139469297
syte_ser78
2006-02-09 10:14
2006.03.05
биос для мп3 плейера


8-1127217771
tomek
2005-09-20 16:02
2006.03.05
Странная ошибка при работе с контекстом и таймером


3-1137070389
UnDISCOvery
2006-01-12 15:53
2006.03.05
Запрос SQL к Access - как ускорить работу?


1-1138909389
Piter
2006-02-02 22:43
2006.03.05
аналог TList с полем Data


2-1139834354
serko
2006-02-13 15:39
2006.03.05
Как лудше сделать?