跳到主要内容

表达式高级话题

基础语法见 表达式。本页讲复杂写法、编辑辅助和内置对象。

简单 vs 复杂​

简单表达式:相当于赋值语句等号右边,如 $= {数字变量} + 1、$= {数字变量} > 10。

复杂表达式:相当于一个会 return 的方法:

$=
if ({number1} > {number2})
{
return "较大值为number1:" + {number1};
}else{
return "较大值为number2:" + {number2};
}

辅助编写​

参数框里按 F1 在原始值、$$、$= 之间切换,见 选择或输入步骤参数。

补全与验证​

补全会提示关键词和变量方法。默认使用在线服务,需要联网;2.2.21 起,也可以在“设置 → 动作设计 → 代码补全服务”中选择本地补全。提示仅供参考,以实际运行为准。

开启补全:

若要在本机补全,先点击“安装 / 检查更新”安装独立组件,再勾选“使用本地补全服务”并保存。安装组件本身不会自动启用本地模式。本地模式可使用“额外引用目录”中的 *.dll 和同名 *.xml 文档;未安装组件或组件故障时,不会自动把代码发送给在线服务。

关闭“使用本地补全服务”时,在线补全会向服务器发送正在编辑的代码、变量类型和默认 using;在线服务只支持预置类库,不读取或上传额外引用目录。补全服务选项、额外引用目录和默认 using 只保存在本机,不参与同步。

表达式测试​

在代码编辑窗口写表达式时,右侧会列出用到的变量和当前计算结果,可改变量值看结果变化。

布尔表达式助手​

「如果」等布尔参数右侧的铅笔可打开助手。

内置对象​

_context:动作上下文​

用来读动作信息;必要时也能改变量,但不建议——改了的值不好调试。

属性:ActionId、ActionTitle、IsRootContext(是否主程序上下文;每个子程序运行时有自己的上下文)。

方法作用
SetVarValue / GetVarValue写 / 读变量
TryGetValue没有该变量时返回默认值
IsVarExists变量是否存在
GetRootContext主程序上下文
GetParentContext上一级子程序或主程序(1.37.24+)
RunSp跑子程序
WriteState / ReadState动作状态
WriteCache / ReadCache对象缓存(动作结束后仍留在内存,退出 Quicker 失效)
UpdateVariablesFromDict用词典更新变量,键是变量名(1.26.0+)
UpdateVariablesFromJson用 JSON 键值更新变量(1.26.0+)

搜索框触发的动作可用 $=_context.ExtraData?.ActiveWindowBeforeSearch 取搜索窗出现前的活动窗口句柄(1.39.10+)。

_eval​

用来注册表达式里额外的类型,见 Eval-expression 文档。要单独一步先注册,后面的步骤才能用。

_qk​

内置功能封装。

引擎已注册的类型​

初始注册:

EvalManager.DefaultContext.RegisterType(
typeof(Regex),
typeof(Path),
typeof(System.Linq.Enumerable),
typeof(JsonConvert),
typeof(JArray),
typeof(JObject),
typeof(JToken),
typeof(DateTime),
typeof(CommonExtensions)
);

另外还能用一部分引擎内部类型,例如 System.IO.File / Directory、StringBuilder、Process、Encoding、DataTable / DataRow 等。

限制与排障​

  • 补全失败先检查网络,再以实际运行为准。
  • 不要在表达式里改变量,除非没有别的办法。
  • _eval 注册的类型只对后续步骤生效。

相关链接​

更新于