haijie1223 发表于 2013-3-31 22:40:26

数字1和字符串1有何区别[已解决]

本帖最后由 haijie1223 于 2013-3-31 23:22 编辑

Local $x=1
If $x=1 Then MsgBox(0,"","Number 1")
If $x="1" Then MsgBox(0,"","String 1")都成立,难道是没有区别?

afan 发表于 2013-3-31 23:04:37

区别用 IsNumber 或 IsString 判断

veket_linux 发表于 2013-3-31 23:07:22

这个问题问的好 ........   蛋疼的 Variant .................

查了帮助   【语言相关 - 数据类型】
AutoIt 中只存在一种数据类型,那就是Variant.Variant可用来存储纯数字的或字符串类型的数据,
而程序具体如何看待这些数据则要看用户的使用方式;
举例来说,若您试图让两个变量相乘, 那么它们将被当作数字类型(指具有数学意义的可供计算的值)使用,
而若您试图连接(拼合)两个变量则它们将被认做字符串(String类型).

一些例子:
    10 * 20 等价于 数字 200 (* 是乘法运算符)
    10 * "20" 等价于 数字 200
    "10" * "20" 等价于 数字 200
    10 & 20 等价于 字符串 "1020" (& 是字符串连接运算符)

veket_linux 发表于 2013-3-31 23:15:44

进一步验证把最近发的 一段判断C盘系统版本的代码改一下


;测试环境winxp
$vercode = ""
$sysver = ""
If (Not FileExists("C:\WINDOWS\syswow64"))And FileExists("C:\WINDOWS\system32\kernel32.dll") Then
        $vercode = FileGetVersion("C:\WINDOWS\system32\kernel32.dll","FileVersion")
Else
        $vercode = FileGetVersion("C:\WINDOWS\syswow64\Wow64.dll","FileVersion")
EndIf       
$sysver = StringLeft($vercode, 3)
Switch $sysver
        Case "5.0"
                $sysver = "Win 2000"
        Case 5.1;;;;;;这行改了,把字符串改成数值,也可以
                $sysver = "Win XP"
        Case "5.2"
                $sysver = "Win 2003 server"
        Case "6.0"
                $sysver = "Vista"
        Case "6.1"
                $sysver = "Win7"
EndSwitch
If FileExists("C:\WINDOWS\syswow64") Then
        $sysver &= " --- x64"
Else
        $sysver &= " --- x86"
EndIf
MsgBox(0, "C盘系统为", $sysver)

haijie1223 发表于 2013-3-31 23:21:52

回复 3# veket_linux


    看来区别不算大,多数情况可以通用了~

netegg 发表于 2013-3-31 23:32:51

回复 5# haijie1223
auto只有数字类型

mbdnmt 发表于 2013-3-31 23:49:29

AutoIt会自动进行转换的

netegg 发表于 2013-3-31 23:54:26

回复 7# mbdnmt
不会

mbdnmt 发表于 2013-4-1 00:17:57

回复 8# netegg

跟你的表达式有关$i = 1

$a = $i + 2
$b = $i & "2"
If IsNumber($a) Then MsgBox(0, "$a is Number", "$a is " & $a)
If IsString($a) Then MsgBox(0, "$a is String", "$a is " & $a)
If IsNumber($b) Then MsgBox(0, "$b is Number", "$b is " & $b)
If IsString($b) Then MsgBox(0, "$b is String", "$b is " & $b)

mbdnmt 发表于 2013-4-1 00:23:17

回复 1# haijie1223

补充说明:

当表达式 If $x = 1时, AutoIt会把$x先转换为Number再和1比较
当表达式 If $x = "1"是,AutoIt会把$x先转换为String再和"1"比较。

在AutoIt中,变量类型是自动进行转换的。 (很多不需要声明变量类型的脚本语言也是,如Ruby、Tcl)

通过以下这个例子可以再体会一下:

$i = 1

$a = $i + 2
$b = $i & "2"
If IsNumber($a) Then MsgBox(0, "$a is Number", "$a is " & $a)
If IsString($a) Then MsgBox(0, "$a is String", "$a is " & $a)
If IsNumber($b) Then MsgBox(0, "$b is Number", "$b is " & $b)
If IsString($b) Then MsgBox(0, "$b is String", "$b is " & $b)

haijie1223 发表于 2013-4-1 00:27:12

回复 10# mbdnmt


谢谢

netegg 发表于 2013-4-1 01:36:00

回复 9# mbdnmt
这是通过操作符进行的,不是auto本身的
页: [1]
查看完整版本: 数字1和字符串1有何区别[已解决]