Страница: 1 | 2 |
Вопрос: If .. Then
Добавлено: 09.05.10 03:07
Автор вопроса: Winand | Web-сайт:
Вариант1:
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"
Бред1
Бред2
Бред3
Бред4
Вариант2:
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"
Бред1
Бред4
Может быть я просто с ума сошел? В обоих случаях bbol=true, но проверка результата различно проходится.
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"
Бред1
Ответы
Всего ответов: 19
Номер ответа: 1
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #1
Добавлено: 09.05.10 03:21
taglib_file_save был задекларирован as boolean, замена на as long всё починила. Попробуй блин догадайся. Лучше бы оно падало, тогда проще найти ошибку)
Номер ответа: 2
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #2
Добавлено: 09.05.10 21:56
Грустно без жесткой проверк типов?
Номер ответа: 3
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #3
Добавлено: 10.05.10 01:21
Чего-чего, а такого поведения булевой переменной я не ожидал)
Номер ответа: 4
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #4
Добавлено: 10.05.10 11:19
Нормальное поведение. Ноль = Ложь, НеНоль = Истина.
Номер ответа: 5
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #5
Добавлено: 10.05.10 16:01
Оба условия срабатывают. Видимо в данном случае переменная на самом деле не булева, ведь в коде
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 11.05.10 09:07
А это все потому что нет жесткой типизации.. и этот сраный бэйсик сам приводит хрен знает к какому типу.. и в результате имеешь то, что имеешь.. Для тебя это должно послужить сигналом бросать этот аццтойный йазыг
Номер ответа: 7
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #7
Добавлено: 11.05.10 12:25
В нормальном поведении булевая переменная должна принимать одно из 2 значений:
True=-1
False=0
Но видимо в "булевую" переменную каким-то образом попадает число, отличное от 0 и -1. Отсюда и проблемы, в принципе невозможные на языке с жесткой проверкой типов
Номер ответа: 8
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #8
Добавлено: 11.05.10 14:33
Не каким-то образом, а конкретно библиотечная функция возвращает int. И бейсик в этом случае видимо ничего не конвертирует.
Конечно язык аццтойный, но интерфейс легко делать) Правда теперь уже сложно, когда приходится хучить окно, чтобы оно приклеивалось к краям и чтобы ограничивать ресайз.
Номер ответа: 9
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #9
Добавлено: 11.05.10 18:14
o_O
Номер ответа: 10
Автор ответа:
Winand
Вопросов: 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
Автор ответа:
LamerOnLine
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
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #12
Добавлено: 12.05.10 14:19
Пришел, облаял всех и щас снова на пол года пропадет ))))
Номер ответа: 13
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #13
Добавлено: 12.05.10 14:39
Да на полгода маловато будет. Сюда как не заглянешь - все одно и то же. Клепают ширинки на болтах и жалутся что штаны все время мокрые. Уныло...
Номер ответа: 14
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #14
Добавлено: 12.05.10 22:27
Мне странно, что бейсик не проверяет правильность значения. Так-то всё понятно. Библиотека возвращает 1, (Not 1) != 0, потому и bbol и not bbol срабатывали. И это всё минусы компилятора, LamerOnLine самый неправый человек в мире
Номер ответа: 15
Автор ответа:
LamerOnLine
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.