发表回复 
AHK变量小议 V1.0.1
2009-01-28, 15 : 09 (这个帖子最后修改于: 2014-10-09 09 : 52 by robertL.)
AHK变量小议 V1.0.1
我真正接触Autohotkey是从今年元旦开始的,以前我一直认为AutoHotKey只是一个操作脚本录制的软件,自从从小众上了解到AutoHotKey支持自己编​脚本,便开始去真正接触AHK。这么一个小巧的软件确实十分耐玩。
 我以前是学pascal的,接触了AHK之后,觉得AHK的变量确实容易弄不清,有时要加%,有时不需要%。经过总结,最后发现这是源于AHK的变量是弱类型的,它们没有明确的类型,它既可以是字符串,也可以是数字、布尔等等。这不需要你去定义;而pascal和c++等语言中的变量是需要你去预先定义的,你定义它是字串时,​它就是字串;定义它是数值,他就是数值,这很明确。
我们来看几个例子:
 clipboard=大家好
 这里的过程是将“大家好”这个字符串放到了clipboard这个变量中。
 在c++中"abcd"中的内容是字符串(pascal中是'abcd'),这里在AHK中有还有一种更贴近的方法。
我们可以用下面的这种的方式来:
 clipboard:="大家好"
 这两种表达方式是一样的(官方的的说法是以前在效率上有一些区别,现在基本上是一样了)。

比如要给value赋值123,可以这么写
 value:=123
这应该是大家所认可的,但其实下面的这种写法也是可以的
 value=123
有的人就问了value=123不是给value赋上123这个字符串吗?答案就是AHK本来采用的就是弱类型,它的存储方式本来就是字符串(这是我的理解,不知道对不对),你赋给value一个数值123,他在接受后就会用"123"这种方式存储,等到运算时机器会自动去操作他的,这不用你去关心。你干脆就认为它是数值好了,抛弃掉第二种赋值方法,这方便思考,没有什么问题。
就我个人来说,我也更愿意:=这种pascal风格的赋值方法,这用起来更舒服一些。赋值就value:=123,赋字符串就value:="大家好"。人为地去区分变量类型,这对于本来学其他非弱类型语言的人,是个不错的方法。

下面的例子是关于Msgbox的
代码: (全选)
value:="大家好"
Msgbox value

这个脚本的输出是value,在Msgbox中你要引用变量需要用到%%.
应该这么写:
代码: (全选)
value:="大家好"
Msgbox %value%

这样的输出就是大家好了。
一个过程的参数基本上是字符串,所以这种跟在别人屁股后面的变量要调用是要用%%的,否则它把你的变量名当成字符串参数了。

还有一个地方,是我刚刚发现的,就是在if判断条件中,它是一个boolean表达式,这里的它默认的是变量名,而不是字符串,看这个例子
if (aaa="ok") 这是判断aaa这个字符串变量是否等于字符串"ok"
代码: (全选)
aaa:="大家好"
bbb:="大家好"
if (aaa="aaa") ;这个判断是假
if (aaa="大家好") ;这样的判断结果是真
if (aaa=bbb) ;这样的判断结果是真
好了就说到这里吧,我在AHK上面也只是刚入门,如果有什么不对的地方,还请大家指正。

[ 本帖最后由 zwzmzd 于 2009-1-29 19:38 编辑 ]
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢zwzmzd
2009-01-29, 18 : 52
 
恩 那个 If 判断,刚开始我也犯糊涂
建议都是用 If (a="a") 的这种格式,不要使用不带括号的那种方式!!

很不错,对新人很有帮助!!:victory:
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
[+] 1用户表示感谢BLooM2
2009-01-29, 19 : 37 (这个帖子最后修改于: 2014-10-09 09 : 52 by robertL.)
 
哈哈,终于有人回复了,让我倍感欣慰啊!

刚刚发现一个笔误,已修正
[ 本帖最后由 zwzmzd 于 2009-1-29 19:41 编辑 ]
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2009-01-30, 22 : 43
 
我喜欢 var = value 这样的赋值方式, 可以少写一个冒号和两个双引号, 对引号什么的还不用转义, 嗯.
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2009-01-31, 14 : 22 (这个帖子最后修改于: 2014-10-09 09 : 52 by robertL.)
 
引用:原帖由 okey3m 于 2009-1-30 22:43 发表 [Image: back.gif]
我喜欢 var = value 这样的赋值方式, 可以少写一个冒号和两个双引号, 对引号什么的还不用转义, 嗯.

因为我以前学的pascal,:=和字符串的表现形式更为亲切,不然我容易搞不清
反正这都是不同人的习惯,自己喜欢的就是最好的嘛!
[ 本帖最后由 zwzmzd 于 2009-1-31 14:23 编辑 ]
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2009-02-01, 19 : 09
 
是的,ahk 这个变量的问题确实让人头痛,而且帮助写得也不是太清楚,所以需要在实践中尝试到底是否需要 %
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2009-02-01, 22 : 55
 
如果用函数返回的值做变量,真是很麻烦,有时还要多写一行先存到别的变量里在引用,真是浪费啊,要不就只能声明全局变量

AutoHotKey Ansi x86 v1.1.24.01
Win10.0.14388 x64
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2009-05-13, 11 : 47
 
嗯,有时候还真有点头晕...
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2009-08-05, 14 : 19
 
变成还是有规则比较舒服点
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2009-10-25, 21 : 59
 
IfInString函数使用需要注意的赋值与变量形式

代码: (全选)
Haystack = abcdefghijklmnopqrs
Needle = abc ;字符串abc不能用""括起来
IfInString, Haystack, %Needle% ;第一个参数不能用%%,第二个参数必须用%%
{
    MsgBox, 字符串已找到。
    return
}
else
    Sleep, 1

简单,再简单一点儿
博客 http://blog.csdn.net/liuyukuan
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-01-02, 12 : 55
 
其实这种变量赋值方式,在运用函数的时候,就有要双引号,不是很统一。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-10-28, 16 : 49
 
学习了,对新手帮助比较大,否则容易头晕。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-11-20, 21 : 14 (这个帖子最后修改于: 2014-10-09 09 : 54 by robertL.)
 
10# hitman

我个人理解:
帮助文件中关于IfInString的说明如下
IfInString, var, SearchString
var variable(变量) 的名称,为得到一个匹配而搜索它的内容。
SearchString:要搜索的字符串。匹配过程不区分大小写,除非 StringCaseSense 被启用。
IfInString, Haystack, %Needle%中根据帮助理解
Haystack为变量名称,
%Needle%为要搜索的字符串,如果不用%%包起来,那么查找的就是Needle这个单词了,而不是"abc".

var variable(变量) 的名称,为得到一个匹配而搜索它的内容。
SearchString要搜索的字符串。匹配过程不区分大小写,除非 StringCaseSense 被启用。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2012-11-20, 21 : 14 (这个帖子最后修改于: 2014-10-09 09 : 57 by robertL.)
 
折叠块: 同13#
10# hitman

我个人理解:
帮助文件中关于IfInString的说明如下
IfInString, var, SearchString [table=50%][tr][td]var [/td][td]variable(变量) 的名称,为得到一个匹配而搜索它的内容。
[/td][/tr][tr][td]SearchString[/td][td]要搜索的字符串。匹配过程不区分大小写,除非 StringCaseSense 被启用。
[/td][/tr][/table]
IfInString, Haystack, %Needle%中根据帮助理解
Haystack为变量名称,
%Needle%为要搜索的字符串,如果不用%%包起来,那么查找的就是Needle这个单词了,而不是"abc".

[table=98%][tr][td=1,1,15%]var[/td][td=1,1,85%]variable(变量) 的名称,为得到一个匹配而搜索它的内容。 [/td][/tr][tr][td]SearchString[/td][td]要搜索的字符串。匹配过程不区分大小写,除非 StringCaseSense 被启用。[/td][/tr][/table]
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2014-10-09, 09 : 49
RE: AHK变量小议
相关:变量名、变量值 表达式 字符串、转义(论坛帖子)

One for all, but man for himself

帮推广:AHK知乎专栏
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合