找回密码
 加入
搜索
查看: 5726|回复: 11

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

  [复制链接]
发表于 2013-3-31 22:40:26 | 显示全部楼层 |阅读模式
本帖最后由 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")
都成立,难道是没有区别?
发表于 2013-3-31 23:04:37 | 显示全部楼层
区别用 IsNumber 或 IsString 判断
发表于 2013-3-31 23:07:22 | 显示全部楼层
这个问题问的好 ........     蛋疼的 Variant .................

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

一些例子:
    10 * 20 等价于 数字 200 (* 是乘法运算符)
    10 * "20" 等价于 数字 200
    "10" * "20" 等价于 数字 200
    10 & 20 等价于 字符串 "1020" (& 是字符串连接运算符)
发表于 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)
 楼主| 发表于 2013-3-31 23:21:52 | 显示全部楼层
回复 3# veket_linux


    看来区别不算大,多数情况可以通用了~
发表于 2013-3-31 23:32:51 | 显示全部楼层
回复 5# haijie1223
auto只有数字类型
发表于 2013-3-31 23:49:29 | 显示全部楼层
AutoIt会自动进行转换的
发表于 2013-3-31 23:54:26 | 显示全部楼层
回复 7# 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)
发表于 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)
 楼主| 发表于 2013-4-1 00:27:12 | 显示全部楼层
回复 10# mbdnmt


谢谢
发表于 2013-4-1 01:36:00 | 显示全部楼层
回复 9# mbdnmt
这是通过操作符进行的,不是auto本身的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-29 07:16 , Processed in 0.100701 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表