Вопрос: If .. Then | Добавлено: 09.05.10 03:07 |
Автор вопроса: ![]() |
Вариант1: Dim bbol As Boolean
bbol = taglib.SaveFile(itemIDs(i)) Debug.Print bbol If bbol Then Debug.Print "Бред1" If Not bbol Then Debug.Print "Бред2" If (True) And (Not bbol) Then Debug.Print "Бред3" If (bbol) And (True) Then Debug.Print "Бред4" If (bbol) And (Not bbol) Then Debug.Print "Бред5" True
Бред1 Бред2 Бред3 Бред4 Вариант2: Dim bbol As Boolean
bbol = True 'taglib.SaveFile(itemIDs(i)) Debug.Print bbol If bbol Then Debug.Print "Бред1" If Not bbol Then Debug.Print "Бред2" If (True) And (Not bbol) Then Debug.Print "Бред3" If (bbol) And (True) Then Debug.Print "Бред4" If (bbol) And (Not bbol) Then Debug.Print "Бред5" True
Бред1 Бред4 Может быть я просто с ума сошел? В обоих случаях bbol=true, но проверка результата различно проходится. Dim bbol As Boolean
bbol = taglib.SaveFile(itemIDs(i)) Debug.Print bbol If bbol Then Debug.Print "Бред1" If bbol = True Then Debug.Print "Бред2" If bbol = False Then Debug.Print "Бред3" True
Это как вообще)
Бред1 |
Ответы | Всего ответов: 19 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 09.05.10 03:21 |
taglib_file_save был задекларирован as boolean, замена на as long всё починила. Попробуй блин догадайся. Лучше бы оно падало, тогда проще найти ошибку)
|
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #2 | Добавлено: 09.05.10 21:56 |
Грустно без жесткой проверк типов? ![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 10.05.10 01:21 |
Чего-чего, а такого поведения булевой переменной я не ожидал) |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Администратор ICQ: 278109632 Вопросов: 42 Ответов: 3949 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 10.05.10 11:19 |
Нормальное поведение. Ноль = Ложь, НеНоль = Истина. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 10.05.10 16:01 |
Оба условия срабатывают. Видимо в данном случае переменная на самом деле не булева, ведь в коде
|
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #6 | Добавлено: 11.05.10 09:07 |
также сработают оба условия
А это все потому что нет жесткой типизации.. и этот сраный бэйсик сам приводит хрен знает к какому типу.. и в результате имеешь то, что имеешь.. Для тебя это должно послужить сигналом бросать этот аццтойный йазыг ![]() |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #7 | Добавлено: 11.05.10 12:25 |
В нормальном поведении булевая переменная должна принимать одно из 2 значений:
True=-1 False=0 Но видимо в "булевую" переменную каким-то образом попадает число, отличное от 0 и -1. Отсюда и проблемы, в принципе невозможные на языке с жесткой проверкой типов |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 11.05.10 14:33 |
Не каким-то образом, а конкретно библиотечная функция возвращает int. И бейсик в этом случае видимо ничего не конвертирует.
Конечно язык аццтойный, но интерфейс легко делать) Правда теперь уже сложно, когда приходится хучить окно, чтобы оно приклеивалось к краям и чтобы ограничивать ресайз. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 246 Ответов: 3333 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 11.05.10 18:14 |
o_O
|
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 11.05.10 20:04 |
VBD, надо было просто в объявлении taglib_file_save сменить булев на long, а в SaveFile бейсик уже сам соображает, как конвертировать в булеан.
Ну а в итоге получается более-менее нормальный редактор тегов http://imagebin.org/index.php?mode=image&id=96442 |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #11 | Добавлено: 12.05.10 13:35 |
Снова криворукость программеров пытаются записать в минусы компилятору. С какого перепоя в булевую переменную заносятся значения, отличные от 0 и -1? Стрингу случаем запихнуть не пробовали?
0FFFFH - (-1) - True Побитное "НЕ" Not 0FFFFH - (0) - False И только. 0FFFEH - (-2) - не False, значит True Not 0FFFEH - (1) - никак не False. Никакие проверки типов тут ни при чем. Если человек объявил Retval функции как VARIANT_BOOL, а возвращает черт знает что - это сугубо его проблемы. |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 58 Ответов: 4255 ![]() |
Профиль | Цитата | #12 | Добавлено: 12.05.10 14:19 |
Пришел, облаял всех и щас снова на пол года пропадет )))) |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #13 | Добавлено: 12.05.10 14:39 |
Да на полгода маловато будет. Сюда как не заглянешь - все одно и то же. Клепают ширинки на болтах и жалутся что штаны все время мокрые. Уныло... |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #14 | Добавлено: 12.05.10 22:27 |
Мне странно, что бейсик не проверяет правильность значения. Так-то всё понятно. Библиотека возвращает 1, (Not 1) != 0, потому и bbol и not bbol срабатывали. И это всё минусы компилятора, LamerOnLine самый неправый человек в мире |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 334781088 Вопросов: 108 Ответов: 2822 |
Профиль | Цитата | #15 | Добавлено: 13.05.10 14:15 |
Winand, а мне странно что вы слышал эти термины но не знаешь что они значат.
VBшный boolean по своей сути ole'шный тип VARIANT_BOOL. Его значения - VARIANT_TRUE и VARIANT_FALSE. Ламеры могут чудить как им влезет - но если не знать язык хотя бы на базовом уровне - подобные клоунады неизбежны. Если библиотека возвращает 1 при retval параметре VARIANT_BOOL - аффтару пора выдернуть руки из задницы. А Not 1 никогда не будет нулем, это должен понимать даже Winand. |
|