nesco писал(а):
Прикол If_else в том, что он тип распознает по первой точке, и Null на первой точке он будет считать целымСтесняюсь просить, это какая то недокументированная возможность?
Ни в одной справке этого не встречал
Ответов: 817
Рейтинг: 52
|
|||
nesco писал(а): Прикол If_else в том, что он тип распознает по первой точке, и Null на первой точке он будет считать целымСтесняюсь просить, это какая то недокументированная возможность? Ни в одной справке этого не встречал |
|||
карма: 1 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Да, блин, читателей нет. Одни писатели.
-= DriveR =-, решение твоей задачи я выложил ещё на первой странице. -= DriveR =- писал(а): Стесняюсь просить, это какая то недокументированная возможность?Ни в одной справке этого не встречал |
|||
карма: 25 |
|
Ответов: 2293
Рейтинг: 678
|
|||
Tad писал(а): решение твоей задачи я выложил ещё на первой страницеВот правильное решение: code_35991.txt |
|||
карма: 11 |
| ||
Голосовали: | -= DriveR =- |
Ответов: 16884
Рейтинг: 1239
|
|||
sla8a писал(а): два раза перебирать массив это не правильно. Нет там массива. Есть MT-строка. А так как Len это не MT-компонент, то он читает ТОЛЬКО ПЕРВЫЙ. (не веришь - поставь _debug() в Len и посмотри) А заодно объясни зачем там DoData ? Вывод: Что больше похоже на костыль - вопрос спорный. |
|||
карма: 25 |
|
Ответов: 2293
Рейтинг: 678
|
|||
Tad писал(а): И где это массив перебирается два раза? Нет там массива. Есть MT-строка. 1. Вы запрашиваете у MST_CheckBoxes с AllCheck МТ-строку содержащую индексы выделенных флажков. 2. MST_CheckBoxes перебирает массив for i := 0 to sControl.Count - 1 do и выдает вам МТ-строку. 3. Вы проверяете эту МТ-строку и обнаружев что хотябы один флажек включен, сново запрашиваете с AllCheck МТ-строку. 4. MST_CheckBoxes сново перебирает массив for i := 0 to sControl.Count - 1 do и выдает туже самую МТ-строку для её перебора. Вот и зачем нужно два раза запрашивать МТ-строку, если можно проще: Запросить МТ-строку и если она не пустая, отдать её на перебор. Без второго запроса. Tad писал(а): А заодно объясни зачем там DoData ? |
|||
карма: 11 |
|
Ответов: 186
Рейтинг: 9
|
|||
sla8a писал(а): Вот правильное решение: code_35991.txtsla8a, Тоже считаю данное решение оптимальным, а с этой фишкой IF_Else сталкивался, но забыл |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
С пунктами 1..4 полностью согласен. Просто не смотрел в коды AllCheck.
sla8a писал(а): DoData запускает МТ-строку в поток, чтоб с ней поочередно мог работать компоненты If_Else и потом если не Null, то эта МТ-строка дойдет и до МТ-Enum.Tad писал(а): А заодно объясни зачем там DoData ? |
|||
карма: 25 |
|
Ответов: 2293
Рейтинг: 678
|
|||
Tad писал(а): DoData после МТ-Enum.------------ Дoбавленo в 11.51: Chipset писал(а): с этой фишкой IF_Else сталкивался, но забыл |
|||
карма: 11 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
sla8a писал(а): И мне припоминается подобноеЭто испокон веков так было у этого компонента. Все это прописано в модуле If_arg, который используется в If_Else и Case
Как видно из кода, тип определяется первым аргументом |
|||
карма: 22 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
nesco писал(а): Как видно из кода, тип определяется первым аргументомdoCompare=Сравнивает первый операнд со вторым. Тип сравнения определяется параметром Type|1| Первый со вторым, а не наоборот. |
|||
карма: 25 |
|
Ответов: 2293
Рейтинг: 678
|
|||
Ну раз все так понятно и логично, то почему регулярно возникают такие "заморочки"?
Вот на первой странице видно что и nesco не сразу разобрался почему не работает If_Else. |
|||
карма: 11 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
sla8a писал(а): Вот на первой странице видно что и nesco не сразу разобрался почему не работает If_Else.Я сначала вообще не понял задачу, пока не запустил тестовый пример |
|||
карма: 22 |
|
Ответов: 2293
Рейтинг: 678
|
|||
nesco писал(а): Я сначала вообще не понял задачу, пока не запустил тестовый примерnesco, ну вот зачем вы увиливаете? Да вы вначале не поняли, согласен, но потом предложили схему где вообще задействовали ArraySum (от прямого использования If_Else вы отказались), и только потом вернулись к If_Else. Не могу утверждать каким ходом шли ваши размышления, но по постам видно, что вы тоже не сразу поняли проблему "не правильной" работы If_Else. |
|||
карма: 11 |
|
Разработчик
Ответов: 26170
Рейтинг: 2127
|
|||
sla8a писал(а): что вы тоже не сразу поняли проблему "не правильной" работы If_ElseЯ сначала вообще не обратил внимания куда там что подключено, тк была мысль проверить что-то альтернативное. А вот когда выложил схему с ArrySum, то возникла мысль -- СТОП, а почему If_Else не работает, а ведь должен? Проверил -- точно, подключено на первую точку, что означает, что срабатывать будет и на Null и на 0. Если ты заметил, то решение с If_Else я выложил практически сразу же после альтернативной схемы. |
|||
карма: 22 |
|
Ответов: 9906
Рейтинг: 351
|
|||
А я вообще не понял, зачем вы тренируетесь в сравнениях...
И так же работает, вроде
|
|||
карма: 9 |
|