Jump to content

Please explain this strange behavior


 Share

Go to solution Solved by Melba23,

Recommended Posts

$foo = "hello"
If $foo = 0 Then ConsoleWrite("wrong")

It took me some time till I found the mistake in AutoItScript code.

First I assing a value to the variable, then I check if the variable is 0, and the result is positive.

Other version:

$foo = 0 ;default value
;some processing here
    $foo = "hello" ;assignment by process
;end of process
If $foo = 0 Then ConsoleWrite("process failed") ;final check to know process result

 

Link to comment
Share on other sites

  • Moderators
  • Solution

oasis375,

When you use comparison operators AutoIt automatically converts then arguments to numbers - and as "hello" converts to 0 you find that the comparison is true. What you need to do is when comparing strings is to use the == operator which forces both sides to string format:

$foo = "hello"
If $foo == 0 Then ConsoleWrite("wrong")
And to prevent the next question of "Why does AutoIt do this", it is a result of using non-typed variables - this was an early design decision by Jon to make AutoIt easy to use which does, at times, cause problems if not properly understood. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Edit: Melba23 types faster!

 

You are comparing a string to a number. I don't even know why this is allowed in autoit but again, this is autoit.
Anyway if you want to compare if the string is equal to an string 0 then use double =.

$foo = "hello"
If $foo == 0 Then ConsoleWrite("wrong" & @LF)

If you want to check if your string is not empty then do it like this:

$foo = "hello"
If $foo <> "" Then ConsoleWrite("wrong" & @LF)
Edited by AutID
Link to comment
Share on other sites

  • Moderators

AutID,

 

You are comparing a string to a bool

Not so - 0 is a number, booleans are True/False. But your suggested solution is correct. ;)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...