|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
СавсемГостькагбэ... 1 != -1 И как же это значение 1 сидит в переменной, описанной As Boolean? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 01:39 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
Владимир Саныч, такого можно достигнуть и другими способами, например через LSet. Но данный конкретный случай видится именно багом. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 03:15 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
Владимир СанычСавсемГостькагбэ... 1 != -1 И как же это значение 1 сидит в переменной, описанной As Boolean? Очень просто. Например если WinAPI-функцию, возвращающую BOOL (сиплюсплюсный бул, который на самом деле инт), задекларить как возвращающую Boolean (вебешный), то именно так и будет - в Boolean окажется 1 вместо -1. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 11:08 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
В общем, это не баг аксеса, это баг VB. Или даже скорее так - кривые руки программера, который не умеет апишные функции декларить. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 11:10 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
Дело не в единице. Там любое двухбайтное целое может оказаться. Об эту бяку я споткнулся года 4-5 назад. Кажется, даже топик здесь был. Тогда официальная дока на некий класс автоматизации сказала мне, что свойство возвращает булеан, во что я поверил, а он, такой-сякой, единицу мне в булеан запихивал. Сейчас попробовал думать – баг это или фича. Решил, что баг - на таком основании: Если бы это была фича, то кроме двухбайтных целых можно было бы напрямую, без copymemory или putmem в булеан любую букву запихнуть. Однако, это не так – проверка типа в примере VladK происходит. Значит, какой-то кусок механизма приведения типов отрабатывает (проверка совместимости объявленных типов), а какой-то нет – частично не работает для этого случая встроенное преобразование. Слово частично означает следующее – если в процедуре GetP присваивать строку "3003" то произойдет преобразование к ближайшему совместимому типу – Integer и значение отлично присвоится в целевой boolean, а если присваивать букву – "K", то произойдет ошибка преобразования типов Для фичи было бы прилично не проверять совместимость типов совсем и ошибку выдавать как раз для первого случая (попытки присвоения строки "3003") – вроде переполнения целого. А так получается, что приведение к ближайшему совместимому числовому типу работает, а встроенное преобразование при этом выключается. Дальше все ломается и логическое значение ведет себя как неотрицаемое - т.е. значение тождественно равно своему отрицанию. и даже b = cbool(b) его уже не лечит Лечить может правильно подобранный OR - типа If b Then (b or -1) модифицированный тест теста Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 12:31 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
повтор: Лечить может правильно подобранный OR - типа If b Then b = (b or -1) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 12:33 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
booby, b=CInt(b) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 13:19 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
booby, у меня соображения, что это баг, примерно те же. Передача варианта параметром по ссылке в процедуру должна быть безопасна и подвергаться необходимой проверке и преобразованию типа, с точки зрения языка, в отличие от небезопасных (отданных на откуп программиста) вызовов LSet, и внешних функций, осуществляющих изменение памяти по переданному адресу. Здесь же кто-то решил срезать угол (или банально недосмотрел), основываясь на единстве внутреннего представления Boolean и Integer. И получился баг компилятора. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 13:28 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
возможно, ОФФ. Если так, - уважаемые модераторы, удалите пост во избежание. booby, Дело не в единице. Там любое двухбайтное целое может оказаться. {могабукаф поскипано} А маны - для кого?Boolean Data Type Boolean variables are stored as 16-bit (2-byte) numbers, but they can only be True or False. Boolean variables display as either True or False (when Print is used) or #TRUE# or #FALSE# (when Write # is used). Use the keywords True and False to assign one of the two states to Boolean variables. When other numeric types are converted to Boolean values, 0 becomes False and all other values become True. When Boolean values are converted to other data types, False becomes 0 and True becomes -1. ЗЫ: и не "лечить" надо, а курить... всё те-же маны. До полного. И окончательного. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 13:31 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
Бенедиктbooby, b=CInt(b) Да, но это двойное преобразование типа. Всего лишь подтверждает тИповую неполноценность boolean. 2СавсемГость я рад тому, что вам хочется что-то сказать. Жаль только, что вы ничего не говорите. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 13:43 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
booby, к чему слова, когда на небе звёзды? Под спойлер из моего предидущего поста заглядывали? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 13:50 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
[quot СавсемГость]... к чему слова, когда на небе звёзды? ...[quot] Претензия на дискурс не может заканчиваться просто подъемом к небу глаз. Попробуйте сформулировать свою идею так, чтобы можно было к ней отнестись как логической пропозиции. Может быть тогда все читатели одновременно ахнут, и отрукоплещут вас. Или вам. А пока лишь вспомнается французский горожанин, мечтающий о смене социального статуса. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 14:58 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
booby, под спойлер -таки не заглядывали :) Там цитата из справки по VBA: Boolean Data Type Boolean variables are stored as 16-bit (2-byte) numbers, but they can only be True or False. Boolean variables display as either True or False (when Print is used) or #TRUE# or #FALSE# (when Write # is used). Use the keywords True and False to assign one of the two states to Boolean variables. When other numeric types are converted to Boolean values, 0 becomes False and all other values become True. When Boolean values are converted to other data types, False becomes 0 and True becomes -1. Идея проста: функционал, не описаный явно, разработчиком не гарантируется. И "багом" быть не может :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 16:26 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
вот теперь я вас понял. ваша цитата: When other numeric types are converted to Boolean values, 0 becomes False and all other values become True. Здесь не написано явно, что Not True = False Значите это не гарантируется и багом не является ситуация, когда not True = True Иными словами, если Debug.print b показывает True, то не гарантируется, что debug.print b , not b покажет true, False Спасибо за разъяснения. Вот теперь все совершенно понятно. (не знаю только, куда деть такое понимание. Может есть конструктивные предложения?) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 16:39 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
booby, Здесь не написано явно, что Not True = False Значите это не гарантируется и ... Я процитировал не всю справку по VBA Сорри, не удержался. ...и багом не является ситуация, когда not True = Trueот комментария воздержусь Иными словами, если Debug.print b показывает True, то не гарантируется, что debug.print b , not b покажет true, FalseСовершенно верно. Не гарантируется. Внимательно перечитайте раздел Not Operator в справке VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 16:56 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
Скажите, может быть в справке (совершенно случайно) написано, что 2*2=4? Если нет, то наверное не стоит считать багом цифру 5, выданную конструкцией Debug.Print 2*2 Ясность полная. "не знаю только, куда деть такое понимание" (с) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 18:34 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
.ЛП, не поверите, написано. Не дословно, конечно. Но, что есть, то есть. ЗЫ: вброс защитан! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2011, 18:41 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
СавсемГостьне поверите, написано. Не дословно, конечно. Но, что есть, то есть. Не поверите, но если уж "не дословно, конечно", то там написано и про то, что Not True = False ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 10:16 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
.ЛПНе поверите, но если уж "не дословно, конечно", то там написано и про то, что Not True = False Not True = False но не Not 1 = False ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 10:39 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
СавсемГость.ЛПНе поверите, но если уж "не дословно, конечно", то там написано и про то, что Not True = False Not True = False но не Not 1 = False Сказано же по-русски Boolean variables ... can only be True or False Какое слово непонятно? Если все слова понятны, то какое такое 1? Упорствуете в своём "не баг" - ваше право. Только тогда придётся хелп сжевать. Или перестать на него ссылаться. Или крестик снять, или трусы надеть. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 10:43 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
.ЛП, что ж так разволновало ? Какое слово непонятно? Если все слова понятны, то какое такое 1? 11774029 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 10:56 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
.ЛПСказано же по-русски Boolean variables ... can only be True or False Какое слово непонятно? .ЛП, учимся читать всю статью, а не только понравившиеся части: Use the keywords True and False to assign one of the two states to Boolean variables. Какое слово не понятно ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 11:31 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
СавсемГостьучимся читать всю статью, а не только понравившиеся части: Use the keywords True and False to assign one of the two states to Boolean variables. Какое слово не понятно ? Алё, Вась? То, что "use keywords" - как то отменяет то, что "can only be"? Принимается односложный ответ. Типа да/нет/не знаю/знаю, но не скажу. После этого и поговорим. четателей развелось, тля, плюнуть некуда :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 13:32 |
|
Баги Access (топик не закрыт, можно добавлять)
|
|||
---|---|---|---|
#18+
.ЛП, что-то ты многословен стал. Стареешь, наверно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2011, 14:44 |
|
|
start [/forum/topic.php?fid=45&msg=37580057&tid=1610055]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
153ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 264ms |
0 / 0 |