表达式高级话题

因软件更新较快,部分文档内容与软件最新版本有所出入,请知悉。

概要


简单表达式与复杂表达式

简单表达式:相当于一个C#赋值语句的等号后面的部分。例如:

  • 返回变量值加1的结果:$= {数字变量} +1
  • 判断变量值是否大于10:$= {数字变量} > 10

复杂表达式:相当于一个返回特定内容的C#方法。例如:判断两个数字之中的较大值:

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

辅助编写


快速切换到表达式模式

在参数输入框中按F1,可在表达式模式、插值模式、普通值模式之间快速切换。


表达式补全提示与验证

补全功能用于自动提示关键词、变量所支持的方法等内容。

注意事项:

  • 补全功能在服务器端实现,需要您的电脑能正常访问网络。
  • 补全内容与验证提示仅供参考。
    • 表达式引擎不是一个完整的C#环境,有些补全提示的方法或关键词在表达式中不支持。
    • 有一些在表达式中可以使用的类型,没有对应的补全提示。


开启补全:

表达式测试

在代码编辑窗口中编写表达式时,会自动开启“表达式测试”功能。

开启时,窗口右侧会显示表达式中所使用的变量的列表和表达式的计算结果。

可以修改变量的值,观察计算结果的变化。


布尔表达式助手

对于“如果”等模块中需要判断条件的参数(布尔类型),Quicker提供了一个“布尔表达式助手”功能。

点击布尔参数右侧的铅笔图标即可打开。


在表达式中使用内置对象

_context:动作上下文对象

可以用于在表达式中访问动作信息。

在需要的时候也可以进行一些hack处理,比如通过表达式更新变量的值等。

注:除非特别必要,不要在表达式中更新变量值。通过表达式更新的内容无法调试观察,在遇到问题时不好定位。

属性:

  • ActionId:当前动作ID
  • ActionTitle:当前动作标题
  • IsRootContext:当前是否为主程序的动作上下文。(每个子程序在运行时会有自己的上下文对象)

方法:

  • SetVarValue:更新变量值
  • GetVarValue:获取变量值
  • TryGetValue:尝试获取变量值,如果不存在则返回指定的默认值
  • IsVarExists:变量是否存在
  • GetRootContext:获取主程序的上下文对象
  • GetParentContext:获取上一级子程序(或主程序)的上下文对象,自1.37.24版本提供。
  • RunSp:执行子程序
  • WriteState:写入动作状态
  • ReadState:读取动作状态
  • WriteCache:写入对象缓存。缓存对象在动作结束的时候仍然会保留在内存,可以在下次运行动作时取出。Quicker退出后缓存失效。
  • ReadCache:读取对象缓存。
  • UpdateVariablesFromDict:使用指定的词典对象更新变量。词典里key对应于变量名。(1.26.0+)
  • UpdateVariablesFromJson:根据Json文本中的键值对更新变量。方便使用json文本格式的动作参数更新多个变量的值。(1.26.0+)

搜索框触发的动作,可以在表达式中使用 $=_context.ExtraData?.ActiveWindowBeforeSearch 获取搜索窗显示之前的活动窗口句柄。(1.39.10+)


_eval:表达式引擎对象

可用于在必要的时候注册在表达式中使用的其它类型。请参考表达式组件的官方文档

注意:

  • 需要单独的步骤注册类型后,在后面的步骤里才可以使用这些类型。


_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.Directory
  • System.Globalization.CultureInfo
  • System.Linq.Expressions.Expression
  • System.IO.FileInfo
  • System.IO.DirectoryInfo
  • System.IO.File
  • System.Text.RegularExpressions.Match
  • System.Collections.ArrayList
  • System.Text.StringBuilder
  • System.Linq.Enumerable
  • System.Collections.IEnumerable
  • System.Diagnostics.Process
  • System.Text.Encoding
  • System.Dynamic.ExpandoObject
  • DataSet、DataTable、DataRow、SqlDataReader、DataColumn、SqlDataAdapter、DbDataReader、DataView、SqlConnection

注:可以在VisualStudio调试环境中通过EvalContext对象的AliasTypes、AliasExtensionMethods等信息了解表达式中所支持的内容。

反馈与讨论

经验创意 · 183
zdf153 2024-07-28 16:24
经验创意 · 189
zdf153 2024-07-26 23:44
随便聊聊 · 203
咿呀杀杀 2024-07-22 20:11 CL 2024-07-23 16:01
BUG反馈 · 272
咿呀杀杀 2024-05-09 14:20 CL 2024-05-09 15:00
语雀在语雀上查看