AHK 中有一个很特别的符号 %。几乎随便从网上下一段 AHK 代码,就可以看到里边有 % 符号,而且 % 在 AHK 里的用法和所有其他编程语言都不一样,基本靠猜的话是猜不出来的。

用法一:%var%

第一种用法我们在介绍赋值表达式的时候接触过:

a = 123
b = %a%
c = %a%456

当用 = 对变量赋值时,如果一个字符串被两个 % 包围,并且中间没有空格,那么含义是取这个变量的值。

在调用一个命令时,也是这样。

a = 123
MsgBox, %a%

如果我们这样用,Name, xx, yy,Name 就是命令;如果我们这样用,Name("xx", "yy"),Name 就是函数。命令和函数的区别我们也会在之后的文章了解到,现在只需要关注命令即可。

注意两个%之间只能有一个单独的变量名,像 x[1]、x.y、x[y]、fun() 等一概不支持。

用法二:% var

% 还有另一种用法,这回它只出现一个,并且 % 的后边有至少一个空格。

a = 123
b = % a
MsgBox, % a

这样用表示 % 后边的内容按表达式来解析。我们可以认为:

b = %a%
MsgBox, %a%

b = % a
MsgBox, % a

是一样的,实际上后者更强大一些。

a := 1
b := 2
c := 3; 计算 a + b + c,结果为 6
MsgBox, % a + b + c; 语法错误
; MsgBox, %a + b + c%; 语法正确,但 + 失去计算功能,变成了字符串的一部分
; MsgBox, %a% + %b% + %c%

如果 % 后边不只是一个变量名,而是一个表达式,那么“用法二”有效,“用法一”无效。

使用“用法一”还是“用法二”

我们发现“用法一”和“用法二”的功能上是有重叠的,那么实际情况应该怎么用呢?这个还是因人而异,尽量前后一致即可。但在某些场景“用法一”更方便,某些情况“用法二”更方便,甚至只能用“用法二”。

“用法一”更方便的场景:

; 变量本身包含双引号等特殊字符
c = "%a% %b%"; 多行字符串中包含变量
c =
(
xxx
%a%
%b%
)

“用法二”更方便的场景:

; 字符串中的变量居多
MsgBox, % a " " b " " c " " d

只能用“用法二”的场景:

; 需要使用表达式
MsgBox, % a + b - c

另外如果考虑性能的话,“方法一”是要比“方法二”快二分之一到一倍的,但一般情况瓶颈不应该出现在这里,所以也不用过多在乎性能问题,如果真的是因为在很大的循环里使用而产生性能问题,修改一下也是很轻松的事情。

付费解决 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等领域相关问题,灵活定价,欢迎咨询,微信 ly50247。

AHK 中 % 符号的用法相关推荐

  1. python中符号的用法_python中的@符号的作用

    '@'符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行.也就是说@A def f(): 是非法的.只可以在模块或类定义层内对函数进行修饰,不 ...

  2. php中符号的用法,关于操作符:PHP中@符号的用法是什么?

    我已经看到在某些功能前面使用@,如下所示: $fileHandle = @fopen($fileName, $writeAttributes); 这个符号的用途是什么? 里奇辛德尔和艾登·贝尔都给出了 ...

  3. java 中符号_谁能告诉我java中符号的用法,见代码

    展开全部 大家都知道Vector以及其他的容器可以不加任何修饰地e68a8462616964757a686964616f31333236373765存储任何类型的对象,这给我们带来了极大的方便,也使得 ...

  4. [AHK]赋值符号:=与=用法总结

    正常情况,字符串应该用:=赋值符号来赋值的,字符串用" "括起来 a_str := "good" b_str := "very" . a_s ...

  5. Python中@符号的用法

    用法一:@xxx是注解或者装饰器 可以查看下面的这个博客. python装饰器"你会Python嘛?" "我会!" '那你给我讲下Python装饰器吧!' &q ...

  6. c 语言中cin用法,c中cin的用法

    c语言中 符号的用法你知道吗?下面小编就跟你们详细介绍下c语言中 符号的用法,希望对你们有用. c语言中 符号的用法如下: 1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: ...

  7. AHK 中循环的基本用法

    在我们重复做一些事情的时候,就需要使用循环了.而 AHK 正是能将复杂的手动工作自动化的工具,循环自然必不可少.但 AHK 中的循环也是多种多样的,我们慢慢道来. 最简单的循环 最简单的情况,我们知道 ...

  8. 深入理解C# 中 “$” 符号的作用以及用法

    前言:$是c# 6.0 的语言特性,功能类似string.format(),更方便的地方在于不要像format一样使用索引,可以直接使用变量.表达式或者方法的执行. 文章目录 一.C#中`$`的作用 ...

  9. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

最新文章

  1. R方差分析(anova)以及Tukey检验
  2. Emoji表情符号录入MySQL数据库报错的解决方案
  3. concurrent.futures dataset
  4. 基于OpenCL的深度学习工具:AMD MLP及其使用详解
  5. Jack (Java Android Compiler Kit)
  6. centos7安装MongoDB(亲测)
  7. nDPI流量协议分析(应用软件识别)
  8. 数据分析应该要避免的6个错误
  9. 9 WM配置-主数据-定义物料分阶段的范围(Staging Area)
  10. laravel5.6 邮件队列database驱动简单demo
  11. MVVM框架从WPF移植到UWP遇到的问题和解决方法
  12. 学hadoop需要什么基础
  13. SpringBoot 根据条件注入需要的 Bean
  14. excel图表交互联动_Excel 制作滑动控制联动(Excel数据图表)具体实现方法
  15. 如何高效填写软件测试缺陷报告?(送缺陷报告模板)
  16. GCC、GNU到底啥意思?
  17. 面试拿到外包公司offer该不该去?!
  18. Vue Bootstrap 结合学习笔记(一)
  19. Outlook邮箱开源许可-android
  20. 数模--0-1规划问题~Matlab中 intlinprog函数用法简介

热门文章

  1. Android的历史与花边
  2. 批处理实现从Excel导入Oracle
  3. HDU - 6438(贪心+思维)
  4. Linux 小知识翻译 - 「架构」(arch)
  5. Web技术栈中不可或缺的Linux技术
  6. 【Spark Summit EU 2016】使用Spark轻松获取高产量基因组
  7. logging 模块记录日志
  8. 连接池和 Timeout expired异常
  9. C++ STL 之 map
  10. 博客园----你真的没有没落.感恩博客园。。。