|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Чем по сути отличаются декларации: Код: vbnet 1.
и Код: vbnet 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2015, 12:33 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
1 по сути массив, 2 по сути что угодно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2015, 13:16 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Первое - неинициализированный динамический массив элементов типа Variant. Второе - одиночная переменная типа Variant. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2015, 14:30 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
по сути - способом проверки допустимости типа присваиваемого значения ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2015, 16:14 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
boobyпо сути - способом проверки допустимости типа присваиваемого значенияхорошо сказал. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2015, 16:58 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Я понимаю, что "2 по сути что угодно". Переформулирую вопрос. Чем по сути отличаются конструкции: Код: vbnet 1. 2.
и Код: vbnet 1. 2.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2015, 09:49 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
тем, что во втором случае ты не сможешь написать Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2015, 10:06 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
скукотища, да нет, лучше всего ответил booby. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2015, 11:03 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Shocker.Pro, после ReDim я смогу написать Let a2(0) = 1 точно также как Let a1(0) = 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2015, 12:49 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
... а до ReDim - точно также - не смогу. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2015, 12:51 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXSShocker.Pro, после ReDim я смогу написать Let a2(0) = 1 точно также как Let a1(0) = 1написать-то ты сможешь, а скомпилировать? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2015, 13:03 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXSЯ понимаю, что "2 по сути что угодно". Переформулирую вопрос. Чем по сути отличаются конструкции: Код: vbnet 1. 2.
и Код: vbnet 1. 2.
? тем что в первом случае производится несанкционированная попытка изменения типа переменной. Тип элемента массива не может быть заменен при динамическом переразмещении массива, если переменная была объявлена как переменная, ссылающаяся на массив однажды (и навсегда) заявленного типа. Этот код не сможет скомпилироваться, т.к. заявленный тип элемента массива a1 не может быть динамически заменен в данном случае. Во втором случае компилятор считает, что базовый тип a2 не меняется - был вариант и остался вариант. Просто после выполнения Redim этот вариант стал содержать массив. Поэтому, как в последующем redim-е массив может быть пересоздан с заменой типа элемента, так и волшебно вообще перестать быть массивом и превратиться - хочешь в дату, а хочешь - в строку - по велению писателя, а потом опять в массив, пока не видно, с каким типом элемента, т.к. программист не успел еще написать этот кусок кода. Все эти действия вообще не меняют (базового) типа переменной a2, а меняют только ее "подтип". Поэтому все они последовательно допустимы. Вообще стоит справку почитывать. конкретно этот вопрос детально освещен в справке на redim: [You can use the ReDim statement repeatedly to change the number of elements and dimensions in an array. However, you can't declare an array of one data type and later use ReDim to change the array to another data type, unless the array is contained in a Variant. If the array is contained in a Variant, the type of the elements can be changed using an As type clause, unless you’re using the Preserve keyword, in which case, no changes of data type are permitted. --- Note To resize an array contained in a Variant, you must explicitly declare the Variant variable before attempting to resize its array. ] ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2015, 22:17 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Господа, спасибо за ваше терпение. Попробую третью попытку. Будет ли код, начинающийся с Код: vbnet 1. 2.
более "эффективен", чем код, начинающийся с Код: vbnet 1. 2.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2015, 16:00 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXS, еще раз - до эффективности у этого кода Код: vbnet 1. 2.
нет шансов скомпилироваться. про "эффективен": становится откровенно скучно. Придайте этому "слову" набор конкретных смыслов, пригодных к обсуждению. Может быть и про "эффективность" тогда поговорим. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2015, 16:10 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2.
- это была ошибка, я её признаю, написал впопыхах. Но с кодом Код: vbnet 1. 2.
всё в порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2015, 16:35 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Я, собственно, почему спрашиваю - вторая конструкция позволяет легко проверять, инициирован ли массив: Код: vbnet 1. 2. 3. 4.
... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2015, 19:18 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Первая тоже позволяет Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 07:42 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
hclubmk, это фантастика! Я реально выпал в осадок!! Кто-нибудь может объяснить, на каком основании код Код: vbnet 1. 2.
- является корректным? При том что код Код: vbnet 1. 2.
- вполне ожидаемо (для меня по крайней мере) является некорректным. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 10:33 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Наверно потому, что условие под if MSDNRequired. Expression. Must evaluate to True or False , or to a data type that is implicitly convertible to Boolean ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 11:35 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
MSDNRequired. Expression. Must evaluate to True or False , or to a data type that is implicitly convertible to Booleanне подходит. Тогда бы работало без Not, а также CBool(a), ан нет ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 11:58 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXSКто-нибудь может объяснить, на каком основании код Код: vbnet 1. 2.
- является корректным? . На том основании: авторNot Operator Performs logical negation on a Boolean expression, or bitwise negation on a numeric expression. result: Required. Any Boolean or numeric expression. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 12:07 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Shocker.Proа также CBool(a) Круто! а такое преобразование типов (я имею ввиду массив) допустимо вообще? Да и без Not к bool явно не преобразовывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 12:08 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
hclubmkShocker.Proа также CBool(a) Круто! а такое преобразование типов (я имею ввиду массив) допустимо вообще? Да и без Not к bool явно не преобразовывается.так о чем и речь. Почему CBool(a1) нельзя, а Not a1 можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 12:15 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Shocker.ProПочему CBool(a1) нельзя, а Not a1 можно? Странные вещи ты пишешь для VB программиста. CBool(a1) нельзя потому, что эта функция принимает в качестве параметра Expression а вот CBool(Not a1) - можно, по описанной выше причине. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 12:28 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
EoltСтранные вещи ты пишешь для VB программиста.потому что всю жизнь решал прикладные задачи, в кишки лазил мало ) Eoltа вот CBool(Not a1) - можно, по описанной выше причине.Почему CBool(-1) можно - мне понятно )) Почему неявное преобразование в Boolean тут If a1 Then не работает, а в выражении Not a1 работает - мне непонятно (точнее, даже не мне, как прикладнику, а больше автору топика) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 12:50 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
> Shocker.Pro, > Почему CBool(a1) нельзя, а Not a1 можно? ... и почему Not в данном случае не отрицание, а инверсия? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 12:53 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
автор Почему неявное преобразование в Boolean тут If a1 Then не работает Потому, что код Код: vbnet 1. 2.
изначально бредовый. В условии IF должен быть тип, который VB сможет неявно преобразовать в Boolean. А здесь указывается ссылка на массив, поэтому закономерно выдается ошибка компиляции. автора в выражении Not a1 работает - мне непонятно Код тоже бред. Но, оператор NOT в качестве Expression может получать выражение числового типа, или того типа который можно привести к числовому. Ссылка на массив может быть приведена к числовому типу. Хотя бы к нулю. Поэтому все работает. P.S. Лучше не использовать неявное приведение типов. Оно слишком запутано и много подводных камней. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 13:16 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXSЧем по сути отличаются декларации: Код: vbnet 1.
и Код: vbnet 1.
? Dim a1() - ты сказал компилятору, что когда-то в будущем, создашь одномерный массив Variant с названием a1. Память под массив не выделяется, ссылок на него нет, фактически массив не существует. Dim a2 - ты выделил память под переменную типа Variant. После объявления переменная существует, ссылка на нее есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 13:35 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Eolt, "Память под массив не выделяется, ссылок на него нет, фактически массив не существует" -- а в коде Код: vbnet 1. 2.
тоже "ссылок на него нет" (до самого конца)? С чем тогда Not работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 14:22 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXSEolt, -- а в коде Код: vbnet 1. 2.
тоже "ссылок на него нет" (до самого конца)? С чем тогда Not работает? автор Но, оператор NOT в качестве Expression может получать выражение числового типа, или того типа который можно привести к числовому. Ссылка на массив может быть приведена к числовому типу. Хотя бы к нулю. Поэтому все работает. Not получает ссылку на несуществующий массив, приводиn ее к числовому типу и возращает логический тип False, который затем использует оператор IF ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 14:27 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Eolt, правильно ли я понимаю, что "несуществующий" (массив в данном случае) - это такой специальный модус существования? И "ссылок на него нет", но "Not получает ссылку" ... В конце концов, как говорится в том анекдоте - "'вилька' и 'тарелька' пишется без мягкого знака; понять это невозможно, нужно просто запомнить!" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 14:49 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
EoltNot получает ссылку на несуществующий массив, приводиn ее к числовому типупочему тогда другие функции не могут "привести эту ссылку к числовому типу"? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 14:49 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
... в сухом остатке, оказывается, иногда всё-таки можно оперировать неинициализированными объектами ... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 14:52 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Скорее, Not инвертирует нулевую ссылку (если уместно так сказать), в -1. В числовом представление CLng(True) тоже -1 (ну или наоборот, если угодно) Отсюда и Not a() == -1 (т.е. Long), а -1 в свою очередь == True ибо VarType(Not a()) = 3 (Long) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 15:00 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXSEolt, правильно ли я понимаю, что "несуществующий" (массив в данном случае) - это такой специальный модус существования? И "ссылок на него нет", это не модус существования, это неинициализированный указатель . Он может иметь нулевое или любое произвольное числовое значение. Указывает не на реальный объект, а на произвольный кусок памяти авторно "Not получает ссылку" ... правильнее сказать не получает ссылку, а "считает" переданный ему указательный тип Pointer, числовым типом - Int32. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 15:09 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Eoltправильнее сказать не получает ссылку, а "считает" переданный ему указательный тип Pointer, числовым типом - Int32.почему тогда попытка присвоения переменной типа Long подобного указателя приводит к ошибке времени выполнения? Ошибка в VB Runtime, который не генерирует исключение при попытке Not над неинициализированным объектом? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 15:23 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
hclubmkСкорее, Not инвертирует нулевую ссылку (если уместно так сказать), в -1. Кстати да, ты прав. Код: vbnet 1. 2. 3. 4. 5.
получаем: -1 -151905777 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 15:45 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Shocker.Proпочему тогда попытка присвоения переменной типа Long подобного указателя приводит к ошибке времени выполнения? А как происходит присваивание? так: Код: vbnet 1.
или так: Код: vbnet 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 15:54 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Shocker.Proпочему тогда попытка присвоения переменной типа Long подобного указателя приводит к ошибке времени выполнения? Ошибка в VB Runtime, который не генерирует исключение при попытке Not над неинициализированным объектом? Вроде нормально присваивается, без ошибок Код: vbnet 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 16:22 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4.
-- увы, оба стопа срабатывают. Так что в качестве признака (не-)инициализированности массива эта конструкция не годится! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 17:37 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXS Код: vbnet 1. 2. 3. 4.
-- увы, оба стопа срабатывают. Так что в качестве признака (не-)инициализированности массива эта конструкция не годится!правильно будет сравнивать с -1 по вышеизложенным причинам ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 17:41 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
100 рублей убытку :) Код: vbnet 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 17:46 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXSТак что в качестве признака (не-)инициализированности массива эта конструкция не годится! для проверки инициализированности массива лучше использовать вот такой код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 18:00 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
пинание исключения не лучший вариант в цикле.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 18:01 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Shocker.ProБЕЗ Not да по сути - без разницы. В 1-м случае - попытка присвоить переменной типа Long ссылку на несуществующий объект - (пустую ссылку) не работает; во втором - присвоить переменной адрес несуществующего объекта = 0; ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 18:07 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Not Not a - адрес SafeArray. В IDE такое прокатывает, но потом если использовать действия с арифметическим сопроцессором происходит ошибка Expression too complex. В скомпилированном варианте таких проблем не возникает. Так что это, так сказать, багофича. Вот примеры http://www.cyberforum.ru/post6044230.html ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 18:28 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Eolt, Код: vbnet 1.
- то есть массивы Код: vbnet 1.
в природе не существуют? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 19:38 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
hclubmk100 рублей убытку : -- спасибо, понял, преклоняюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 19:39 |
|
Dim a1() vs Dim a2
|
|||
---|---|---|---|
#18+
Иван FXSEolt, Код: vbnet 1.
- то есть массивы Код: vbnet 1.
в природе не существуют? ну добавь проверку на отрицательные массивы, в чем проблема Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
хотя отрицательные массивы имхо какая-то непонятная наркомания.. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2015, 20:07 |
|
|
start [/forum/topic.php?all=1&fid=60&tid=2155838]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 505ms |
0 / 0 |