Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Разница между операторами равенств ( =, ==, <> )

Ответить
Настройки темы
[решено] Разница между операторами равенств ( =, ==, <> )

Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


Столкнулся со следующей проблемой:

Код: Выделить весь код
while 1
        $messagesListElementState = GUICtrlRead ($messagesList, 1);Какой элемент сейчас выбран
	$messagesListElementStateTextTemp = $messagesListElementStateText
	$messagesListElementStateText = GUICtrlRead ($messagesListElementState$messagesListElementState, 1);Текст выбранного эл-та
	if Not ($messagesListElementStateText == $messagesListElementStateTextTemp) Then
		showMessage ($messagesList, $messageEditLabel)
	EndIf
wend
Смысл цикла - считываем номер текущего элемента, считываем текст из него, сравниваем с временной переменной (текст активного элемента в прошлый проход), если они не равны - делаем действия.
Изначально у меня условие вместо
Код: Выделить весь код
if Not ($messagesListElementStateText == $messagesListElementStateTextTemp) Then
выглядело так:
Код: Выделить весь код
if $messagesListElementStateText <> $messagesListElementStateTextTemp then
При этом, условие не отрабатывалось (меняется активный эл-т, меняется текст, а сравнение через <> выдает false - т.е., как я понимаю, элементы якобы равны)



Резюмирую: в случае, когда messagesListElementStateTextTemp = 0, а messagesListElementStateText = 'Привет' сравнение через not ( == ) дало True, а через <> - False.
Как так?

Отправлено: 18:22, 23-05-2011

 

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Зачем так усложнять?

Чтобы ответить на поставленный вопрос, желательно увидеть полный пример.
Хотя думаю дело в сравнений разных типов данных.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 19:46, 23-05-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 126

Профиль | Отправить PM | Цитировать


Freez,
<> не учитывает регистр букв, как и =
== - учитывает регистр букв

Отправлено: 19:54, 23-05-2011 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Freez:
в случае, когда messagesListElementStateTextTemp = 0, а messagesListElementStateText = 'Привет' сравнение через not ( == ) дало True, а через <> - False. »
Для AutoIt 0 это тоже самое что и ''.

«==» это не тоже самое что и «=», второе применение сравнивает типы данных как строки, а первое по отдельности, пример:

Код: Выделить весь код
$vVar1 = 0
$vVar2 = ''

ConsoleWrite(($vVar1 = $vVar2) & @LF) ;True - так как при использований "=", переменная $vVar1 принимается как пустая строка, чему и равняется $vVar2
ConsoleWrite(($vVar1 == $vVar2) & @LF) ;False - так как при использований "==", переменная $vVar1 принимается как 0 (целое число), чему НЕ равняется $vVar2
Цитата AZJIO:
<> не учитывает регистр букв, как и =
== - учитывает регистр букв »
Верно, но в данном случае немного другая ситуация.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 19:55, 23-05-2011 | #4


Аватара для AZJIO

Старожил


Сообщения: 265
Благодарности: 126

Профиль | Отправить PM | Цитировать


Creat0R, просто сравниваеть результаты инвертирования выражения, которые имеют разные свойства уже не логично, это я и показал.
Freez, посмотри примеры логических выражений.

Отправлено: 20:17, 23-05-2011 | #5


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата AZJIO:
просто сравниваеть результаты инвертирования выражения, которые имеют разные свойства уже не логично, это я и показал. »
Но Freez же не знает, будут ли они разными, он сравнивает значения из List'а.
И ты показал про регистр букв, тут нет связи с регистром, здесь вопрос именно в сравнений типов данных. Это обсуждалось немало на оф. форуме.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 22:38, 23-05-2011 | #6


Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


Creat0R, с типами данных - это понятно. Вопрос в следующем:

Код: Выделить весь код
If  '' = 'Привет'  Then
	ConsoleWrite ('Пустое место равно Привету')
EndIf
Код: Выделить весь код
If  0 = 'Привет'  Then
	ConsoleWrite ('Ноль равен Привету')
EndIf
по логике вещей, эти условия должны быть равнозначны (это подтверждается нижеследующим условием (true)):
Код: Выделить весь код
If  '' = 0  Then
	ConsoleWrite ('Пустое место равно нулю')
EndIf
На практике же, первое выражение дает False (логично), а второе - True (каким образом??)

Сначала я было подумал, что через " = " любая строка равна любому числу, однако (false):
Код: Выделить весь код
If  '' = 1  Then
	ConsoleWrite ('Пустое место равно единице')
EndIf
Таким образом получается, что " = " истина для любой строки и нуля? ( ('anyString' = 0) - true )
Какой в этом смысл?

Отправлено: 12:36, 24-05-2011 | #7


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Freez:
с типами данных - это понятно »
Если было бы понятно, то не возникало бы последующих вопросов.

Цитата Freez:
по логике вещей, эти условия должны быть равнозначны »
Это почему?
В данном случае (второй пример сверху) оба типа данных преобразовываются в целое число, почему - потому что так устроен AutoIt, он работает только с одним типом данных - Variant.
В первом же примере, оба типа являются строковыми, поэтому и нет совпадения.

Цитата Freez:
Таким образом получается, что " = " истина для любой строки и нуля? »
«If '' = 0 Then» это тоже самое что и «If Int('') = Int(0) Then».

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:16, 24-05-2011 | #8


Пользователь


Сообщения: 52
Благодарности: 0

Профиль | Отправить PM | Цитировать


Creat0R, ага, спасибо, теперь совсем понятно ))

Отправлено: 13:19, 24-05-2011 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Разница между операторами равенств ( =, ==, <> )

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разница между материнскими платами? micro8 Хочу все знать 4 14-02-2011 17:49
HDD - разница между форматированием vladimirn Накопители (SSD, HDD, USB Flash) 1 06-04-2009 17:43
Какая разница между С++ и Dev C++ Skrip Программирование и базы данных 3 20-07-2005 17:42
Разница между форматами VCD Zuka Хочу все знать 1 20-04-2005 11:03
Разница между 'To' и 'Cc' ankerok Хочу все знать 9 29-04-2003 10:11




 
Переход