# 求值器语法
求值器的语法类似于 JScript (Javascript) 和 C++。
### 简介
通常,表达式从左到右进行求值。标准 BODMAS 规则适用于数学运算符——可以使用括号 `()` 更改计算顺序。如果求值表达式包含多个子句,每个子句都必须以分号 `;` 结尾。
可以使用 `if`, `elseif` 和 `else` 来测试条件并根据结果执行不同的计算。要测试的条件必须出现在括号 `()` 内。还可以使用 `?:` *三元运算符*(也称为 *条件运算符*)。
可以使用 `{` 标记在 `if`, `elseif` 或 `else` 后打开一个 *作用域*,并使用 `}` 关闭它。作用域用于允许在测试结果中计算多个子句。
可以使用 `=` 分配变量。无需预先声明变量。变量是 [类型的](variable_types.zh.md),但没有强类型——类型将被推断,类型之间的转换是自动的。还可以使用 `as` 运算符进行显式转换。
求值器提供了许多 [函数](/Manual/reference/evaluator/README.zh.md)。要调用函数,函数名后面需要跟括号 `()`。如果函数接受任何参数,这些参数必须用逗号分隔并出现在括号内——但即使函数不接受参数也需要括号。
可以使用注释,求值器会忽略它们——它们必须以 `//` 开头。
### 返回值
调用求值器的大多数上下文都希望获得返回值。例如,用于修改按钮标签的求值表达式会返回一个字符串以用作按钮的标签。
可以使用 `return` 关键字将求值表达式的结果返回给调用者。
return "Button Label";
如果未使用 `return` 关键字,求值表达式还具有 *隐式返回值*——如果没有明确指明,则将返回最后引用的函数、运算符或变量的值。这样可以节省空间。
例如,可以使用代码 `{=source=}` 将求值器变量“source”的值直接插入命令行中。这等效于 `{=return source;=}`。
### 运算符
支持以下数学运算符:
| | |
|-----|--------------------------|
| \+ | 加法 / 连接 |
| \- | 减法 |
| \* | 乘法 |
| / | 除法 |
| Mod | 取模 |
支持以下赋值运算符:
| | |
|-----|---------------------------|
| = | 直接赋值 |
| += | 加法赋值 |
| -= | 减法赋值 |
| \*= | 乘法赋值 |
| /= | 除法赋值 |
支持前缀和后缀递增和递减运算符:
| | |
|-----|-----------|
| ++ | 递增 |
| -- | 递减 |
(前缀递增,例如 `++a`,返回递增值;后缀递增,例如 `a++`,返回前一个值)。
支持以下关系(比较)运算符:
<table>
<tbody>
<tr class="odd">
<td>==</td>
<td>等于</td>
</tr>
<tr class="even">
<td>!=<br />
<></td>
<td>不等于</td>
</tr>
<tr class="odd">
<td>></td>
<td>大于</td>
</tr>
<tr class="even">
<td><</td>
<td>小于</td>
</tr>
<tr class="odd">
<td>>=</td>
<td>大于或等于</td>
</tr>
<tr class="even">
<td><=</td>
<td>小于或等于</td>
</tr>
</tbody>
</table>
支持以下逻辑运算符:
<table>
<tbody>
<tr class="odd">
<td>And<br />
&&</td>
<td>逻辑 AND</td>
</tr>
<tr class="even">
<td>Or<br />
||</td>
<td>逻辑 OR</td>
</tr>
<tr class="odd">
<td>Not<br />
!</td>
<td>逻辑 NOT</td>
</tr>
</tbody>
</table>
支持以下按位运算符:
| | |
|-----|-------------|
| & | 按位 AND |
| \| | 按位 OR |
| ~ | 按位 NOT |
| ^ | 按位 XOR |
其它运算符:
| | |
|-------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ?: | 三元运算符根据条件返回一个值,例如 `x = a ? b : c;` 如果 `a` 为真,将 `x` 设置为 `b`,否则将 `x` 设置为 `c`。 |
| As | 转换运算符。允许将变量转换为显式类型。也可以用来格式化数字、大小和日期。 |
| : | 单独使用时(而不是作为三元运算符的一部分),这提供了一种将变量初始化为显式类型的方式。 |
| \[ \] | 用于定义 *值容器*。值容器是一个可以包含其它变量的变量——有点类似于 C++ 中的 *结构* 或 Javascript 对象数组。 |
| . | 用于访问 *值容器* 的成员变量。 |
### If / ElseIf / Else
求值器中的主要流程控制形式以 `if` 子句开头。要测试的条件必须出现在括号内。条件(其中可以包括函数调用和数学运算)将计算为真或假。如果结果为真,则会进入 `if` 之后紧接着的代码分支。如果该代码分支需要包含多个子句,则必须使用 `{` 大括号字符打开一个作用域。
// 简单测试,如果 x 等于 5,则向调用我们的人返回字符串“five”
if (x == 5) return "five";
// 更复杂的测试,如果 x 加 y 大于 20...
if (x + y > 20)
{
// 我们打开一个范围,以便可以有多个子句
Output("是的,它大于 20!");
return "大于 20";
}
如果 `if` 子句测试的条件求值为 false,则求值器将跳过下一个子句(或下一个范围,如果打开了范围)。然后它将寻找 `elseif` 或 `else` 关键字。`Elseif` 允许您提供另一个要测试的条件 - 与 `if` 相同,它也适用于同样的行为。
if (x + y > 20)
return "大于 20";
elseif (x == 5)
return "five";
可以包含任意数量的 `elseif` 子句。求值器将按顺序继续求值每个子句的条件,直到找到求值为 true 的条件。
如果提供了 `else` 子句,则仅当前面的条件之一未求值为 true 时,才执行其后的代码。
if (x + y > 20)
return "大于 20";
elseif (x == 5)
return "five";
else
return "其它";
请注意,块中只有一个(最多)`if`、`elseif` 或 `else` 子句会执行其代码。如果块不以 `else` 结束,则块内可能没有任何代码被执行(即如果所有条件都求值为 false)。
### 三元运算符
*三元* 或 *比较* 运算符是唯一带有三个参数而不是两个参数的运算符。它基本上是 `if`/`else` 的简写形式。
return (x == 5) ? "five" : "something else";
`?` 左侧的表达式立即被求值为 true 或 false。如果求值为 true,则返回 `?` 右侧的值 - 否则,返回 `:` 右侧的值。
如果需要,可以将多个三元运算符串联在一起:
return (x + y > 20) ? "more than twenty" : (x == 5) ? "five" : "something else";
记住,求值是从左到右进行的,在上面的示例中:
- `x + y` 的结果是否大于 20?如果是,则返回“大于 20”
- 否则,`x` 是否等于 5?如果是,则返回“five”
- 否则,返回“其它”
- 主页
- 文件浏览
- 文件窗口
- 工具栏
- 收藏栏
- 多文件夹
- 单窗口模式
- 标签页
- 分栏
- 关联文件夹
- 来源和目标
- 查看
- 列表
- 列
- 排序
- 分组
- 视图
- 详细视图
- 缩略图
- 平面视图
- 标记
- 选择
- 复选框
- 即时查找
- 信息提示
- 查看器
- 文件夹格式
- 导航
- 地址栏
- 文件夹树
- 收藏夹
- 别名
- 文件对话框
- 文件搜索
- 文件操作
- 文件创建
- 文件移动
- 文件复制
- 重命名
- 剪贴板
- 上下文菜单
- 拖放
- 安全
- 文件类型
- 元数据
- 压缩包
- 图片
- 文档
- 纯文本
- 代码
- Markdown
- Word 文档
- 网页
- 表格
- Excel 表格
- 数据库
- 幻灯片
- 模型
- 种子
- 邮件
- Directory Opus
- 配置
- 主题
- 命令
- 命令
- 修饰符
- 内置命令
- 脚本
- 变量
- 官方手册
- 目录
- 版权
- 许可证
- 最终用户许可条件
- 批量许可条件
- 致谢
- 简介
- 基本概念
- 启动 Opus
- 文件窗口
- 打开文件窗口
- 默认文件窗口
- 导航
- 主文件夹
- 上、前进、后退
- 文件树
- 地址栏
- 路径字段
- 驱动按钮和下拉菜单
- 收藏夹
- 智能收藏夹
- 最近和历史列表
- 别名
- 成对文件夹
- 标签
- 标签切换器
- 锁定标签页
- 关联标签页
- 标签组
- 视图模式
- 双栏
- 导航锁定
- 工具栏
- 默认工具栏
- 菜单工具栏
- 操作工具栏
- 收藏栏
- 文件列表工具栏
- “图像”工具栏
- 动态工具栏
- 工具栏集
- 即时查找字段
- 查看器窗格
- 元数据窗格
- 实用程序面板
- 布局
- 样式
- 主题
- 创建自己的主题
- 状态栏
- 资源管理器替换模式
- 源目录和目标目录
- 选择文件
- 使用鼠标和键盘进行选择
- 单击模式
- 复选框模式
- 简单通配符选择
- 高级选择
- 选择单元格
- 搜索和过滤
- 过滤栏
- 显示所有内容
- 工具栏过滤项
- 快速搜索
- 查找文件
- 简易查找
- 高级查找
- 排序和分组
- 手动排序
- 文件夹格式
- 文件夹格式对话框
- 列
- 冻结列
- 排序
- 分组
- 显示
- 过滤器
- 已保存文件夹格式
- 自动记住格式
- 内容类型
- 确定当前格式
- 锁定格式
- 可展开文件夹
- 平面视图
- 文件夹大小
- 虚拟文件系统
- 系统虚拟文件夹
- 文件集合
- 存储的查询
- 库
- 压缩包
- FTP
- MTP
- 文件操作
- 复制、移动和删除文件
- 复制和粘贴
- 拖放
- 使用工具栏按钮进行复制
- 复制时使用通配符
- 复制队列
- 复制覆盖和幽灵文件
- 无人值守操作
- 作业栏
- 确认文件替换对话框
- 复制已更新文件
- 同步
- Deleting Files
- 安全删除
- 重命名文件
- 内联重命名
- 简单通配符重命名
- 高级重命名
- 重命名预设
- 重命名模式
- 标准通配符重命名
- 查找和替换
- 正则表达式
- 正则表达式 + 查找并替换
- 重命名操作
- 文件编号
- 重命名宏
- 重命名选项
- 使用元数据重命名
- 重命名脚本
- 创建文件夹
- 创建压缩包
- 添加到压缩包文件
- 添加到压缩包对话框
- Zip 选项
- 7z 选项
- RAR 选项
- TAR BZip2 选项
- TAR GZip 选项
- Zip 文件
- Zip 注释
- 只读模式
- 自解压 Zip 文件
- 跟踪和撤销文件操作
- 更改属性
- 标记和状态图标
- 编辑元数据
- 文档属性
- 图片属性
- 音乐属性
- 添加封套插图
- 视频属性
- 扩展属性
- 元数据的编程设置
- 时间偏移
- 文件说明
- 过滤操作
- 过滤条款
- 添加、删除和编辑子句
- 过滤条款类型
- 文本过滤器
- UAC 和管理员模式
- FTP
- FTP 地址簿
- 默认设置
- 站点页
- 网络页面
- Display Page
- 索引页面
- 声音页面
- 杂项页面
- 速度页面
- 特殊页面
- 转账页面
- 代理页面
- 添加新站点
- FTP 连接
- 站点属性
- FTP 日志
- FTP 路径
- 附加功能
- 查看图像
- 查看器鼠标、键和工具栏
- 图像标记
- 文件窗口关联查看器
- 播放声音
- 图像转换
- 自动化图像转换任务
- 打印文件夹
- 重复文件查找器
- 拆分文件
- 拼接文件
- 制作链接和连接点
- 浮动工具栏
- 控制浮动工具栏
- 系统级热键
- 导出到 USB
- 与 Everything 集成
- 擦除所有空白
- 文件类型概览
- 更新检查器
- CLI
- 崩溃日志
- 配置
- 备份和恢复配置
- 配置类别
- 色彩和字体
- 暗黑模式
- 主题
- 颜色混合
- Directory Opus 颜色
- Windows 颜色
- 图像
- 字体
- 文件列表
- 文件夹展开
- 鼠标
- 背景事件
- 导航
- 选项
- 信息提示
- Tab键
- 状态栏
- 标题栏
- 文件列表列
- 外观
- 求值器列
- 求值器分组
- 文件名
- 图标
- 选项
- Shell 属性
- 文件列表模式
- 详细信息
- 增强模式
- 外观
- 按钮
- 缩略图
- 文件夹
- 性能
- 样式
- 平铺模式
- 文件操作
- 文件复制
- 属性
- 确认
- 元数据
- 安全
- 删除文件
- 双击文件
- FTP
- 日志记录
- 元数据
- 元数据编辑器
- 音乐类型
- 选项
- 进度指示器
- 统计文件
- 作业栏
- 重命名文件
- 控制键
- 过滤和排序
- 过滤
- 过滤栏
- 即时查找
- 过滤模式
- 查找模式
- 文件夹模式
- 全局过滤器
- 快速键
- 排序
- 文件夹
- 自动读取
- 文件夹格式
- 自动格式
- 文件夹图像
- 文件夹大小
- 交接点和链接
- 网络服务器
- 特殊文件夹
- 虚拟文件夹
- 桌面
- 文件系统
- 此电脑
- 文件夹标签页
- 尺寸
- 边缘颜色
- 文件夹标签栏
- 分组
- 锁定
- 选项
- 文件夹树
- 外观
- 内容
- 展开/折叠
- 图钉
- 选项
- 选择事件
- 常用路径
- 收藏夹列表
- 文件夹别名
- 主文件夹
- 配对文件夹
- 最近列表
- 智能收藏夹
- Internet
- 电子邮件
- 更新
- 标记
- 标记 定义
- 标记分配
- 在特定文件夹中
- 选项
- 启动 Opus
- 资源管理器替换
- 来自桌面
- 任务栏图标
- 来自 Win + E 热键
- 启动
- 布局和样式
- 默认文件窗口
- 布局
- 样式
- 地址栏
- 选项
- 路径字段
- 外观
- 菜单
- 路径补全
- 工具栏
- 其它
- 高级选项
- 外部工具
- 隐私
- Shell 扩展
- 声音
- Windows 集成
- 跳跃列表
- Windows 启动延迟
- 工具栏
- 外观
- 文件夹工具栏
- 图标
- 选项
- 工具栏组
- 视图工具条
- 用户界面
- 语言
- Spacing
- 过渡动画
- 查看器
- 独立查看器
- Options
- 尺寸和位置
- 鼠标按钮
- 已标记图片
- 幻灯片放映
- 查看器窗格
- 查看器插件
- Zip 和其它压缩包文件
- 压缩包与 VFS 插件
- 压缩包选项
- 上下文菜单
- Zip 文件
- 自定义
- 自定义对话框
- 工具栏
- 上下文菜单
- 按键
- 命令
- User Commands
- 默认工具栏
- 创建您自己的按钮
- Editing the Toolbar
- 启动选项
- 工具栏上下文菜单
- 多功能按钮
- 下拉按钮和菜单
- 动态按钮
- 驱动器按钮配置
- Field Buttons
- 路径字段配置
- 过滤器字段配置
- 驱动器下拉配置
- 与他人分享功能
- 命令编辑器
- 简单命令编辑器
- 高级命令编辑器
- 使用热键控件
- 用户自定义命令
- 同步和异步函数
- 内部命令参数
- 将文件传递到外部程序
- 命令修饰符
- MS-DOS 批处理命令
- WSL 命令
- 嵌入重命名脚本
- DDE 函数
- 嵌入式功能
- 文件类型
- Directory Opus 文件类型
- 文件类型组
- 使用方式编辑器
- 文件类型编辑器
- Actions
- 事件
- 上下文菜单
- 下拉菜单
- 替换菜单
- Info Tip
- 平铺模式
- 脚本
- 重命名脚本
- Custom Fields in the Rename Dialog
- 脚本函数
- 脚本插件
- 包括文件
- 模块
- 脚本包
- 脚本安装器文件
- Script Management
- 创建新脚本
- 脚本安装器
- 脚本编辑器
- 脚本资产**
- 编辑器
- 代码编辑器
- 对话框编辑器
- 对话框编辑器命令
- Adding Dialog Controls
- 尺寸和定位对话框控件
- 使用布局命令
- 对话框控件制表顺序
- 对话框控制助记符
- 语言覆盖
- 对话框控件属性
- 常见对话框属性
- 对话框属性 若要编辑对话框的属性,请在任意控件外部单击对话框。适用于对话框的具体属性是:
- 静态文本属性
- 标记文本属性
- 编辑控件属性
- 按钮属性
- 复选框属性
- 单选按钮属性
- 组合框属性
- 列表框属性
- 列表视图属性
- 标签页控件属性
- 组框属性
- 字符串编辑器
- 片段
- 脚本对话框
- 创建脚本对话框
- 对话消息循环
- 简单对话框
- 分离对话框
- 读取对话框控件值
- 与对话框控件交互
- 资源
- 字符串资源
- 脚本日志
- 示例脚本
- 示例重命名脚本
- 简单脚本函数
- 添加新内部命令
- 添加新列
- 使用 Shell 属性添加新列
- 拓展即时查找领域
- 简单对话框和弹出菜单
- 脚本对话框示例
- 响应事件
- 求值器
- 求值器语法
- 求值器变量
- Applicable Contexts
- 求值器列
- 求值员组
- 过滤器和查找
- 文件信息提示和平铺
- 按钮和功能
- 求值器按钮标签
- 求值器按钮图标
- Tooltips
- Dynamic State
- Conditional Behavior
- 函数中的求值子句
- 求值插入代码
- 求值器生成的命令行
- 重命名
- 重命名控制键
- 状态栏
- 列上下文菜单
- 标签上下文菜单
- Examples
- 参考
- 通配符参考
- 模式匹配语法
- 正则表达式语法
- 状态栏代码
- 文件和文件夹计数代码
- 磁盘空间代码
- 音乐和视频时长代码
- 图形元素代码
- 其它代码
- 条形图和百分比
- 隐藏状态栏中的部分内容
- 状态栏上的填充部分
- 命令参考
- 参数类型
- 内部命令
- CLI
- Clipboard
- Close
- ContextMenu
- Copy
- CreateFolder
- Delete
- Favorites
- FileType
- Find
- GetSizes
- Go
- Help
- Image
- Join
- Marker
- Play
- Prefs
- Properties
- Recent
- Rename
- Select
- Set
- SetAttr
- Show
- Split
- Toolbar
- Undo
- 外部控制代码
- 用于传递文件名代码
- 有关路径的代码
- 对话框显示代码
- 日期和时间的代码
- Codes for clipboard and variables
- 命令修饰符参考
- 脚本参考
- 脚本对象
- 关于 AboutData**
- Activate文件窗口Data
- ActivateTabData
- AddCmdData
- AddColData
- AfterFolderChangeData
- 别名
- 别名
- Args
- AudioCoverArt
- AudioMeta
- BeforeFolderChangeData
- Blob
- BusyIndicator
- ClickData
- CloseListerData
- CloseTabData
- 列
- ColumnValue
- Command
- ConfigChangeData
- 控件
- CustomFieldData
- 日期
- Dialog
- DialogListColumn
- DialogListColumns
- DialogListGroup
- DialogListItem
- DialogOption
- DisplayModeChangeData
- 停靠窗口
- DocMeta
- DOpus
- DOpusFactory
- DoubleClickData
- DPI
- Drive
- ExeMeta
- 收藏**
- 收藏夹
- File
- FileAttr
- FileGroup
- FileOperationCompleteData
- FileSize
- FilesystemChangeData
- FiletypeGroup
- FiletypeGroups
- 过滤器
- FilterParseError
- FlatViewChangeData
- FolderEnum
- FontMeta
- Format
- FSUtil
- Func
- GlobalFilters**
- GetCopyQueueNameData
- GetCustomFieldData
- GetNewNameData
- HighlightedColumns
- 图像
- ImageMeta
- IncludeFileInitData
- Item
- 项
- Lister
- 列出对象
- ListerResizeData
- ListerUIChangeData
- 映射
- 元数据**
- Msg
- Open文件窗口Data
- OpenTabData
- OtherMeta
- PairedFolder
- Path
- 进度
- 快速过滤器
- Rect
- 结果
- 脚本
- ScriptColorPair
- ScriptColumn
- ScriptColumnData
- ScriptCommand
- ScriptCommandData
- ScriptFAYTCommand
- ScriptFAYTCommandData
- ScriptConfig
- ScriptInitData
- ScriptStrings
- ShellProperty
- ShutdownData
- SmartFavorite
- 智能收藏夹
- SortOrder
- SourceDestData
- StartupData
- StringSet
- StringTools
- StyleSelectedData
- SysInfo
- SystemSettingChangeData
- Tab
- TabClickData
- TabGroup
- TabGroups
- TabGroupTabEntry
- TabGroupTabList
- TabStats
- 工具栏
- 工具栏
- UnorderedSet
- Var
- Vars
- Vector
- 版本**
- VideoMeta
- Viewer
- 查看器
- ViewerEventData
- 工具
- WinVer
- 脚本事件
- OnAboutScript
- OnActivateLister
- OnActivateTab
- OnAddColumns
- OnAddCommands
- OnAfterFolderChange
- OnBeforeFolderChange
- OnClick
- OnCloseLister
- OnCloseTab
- OnDisplayModeChange
- OnDoubleClick
- OnFilesystemChange
- OnFileOperationComplete
- OnFlatViewChange
- OnGetCopyQueueName
- OnGetCustomFields
- OnGetNewName
- OnInit
- OnInitIncludeFile
- OnListerResize
- OnListerUIChange
- OnOpenLister
- OnOpenTab
- OnScriptColumn
- OnScriptCommand
- OnScriptConfigChange
- OnScriptFAYTCommand
- OnShutdown
- OnSourceDestChange
- OnStartup
- OnStyleSelected
- OnSystemSettingChange
- OnTabClick
- OnViewerEvent
- 求值器函数
- AbortFunc
- Abs
- Age
- Arg
- As
- Asc
- Atan
- Capitalize
- Cbrt
- Ceil
- Chr
- Cos
- Clip
- ClipFormat
- Count
- DateDiff
- DatePart
- DegToRad
- DisplayName
- Elapsed
- Exists
- FileCount
- FileExt
- FilePart
- Floor
- Format
- Hypot
- InStr
- IsAlpha
- IsChecked
- IsDigit
- IsEnabled
- IsLower
- IsParent
- IsPath
- IsPunct
- IsSelected
- IsSet
- IsSpace
- IsUpper
- KeyDown
- LanguageStr
- LCase
- Left
- Len
- MakeLegal
- Match
- Max
- Mid
- Min
- Now
- Output
- Parent
- PathType
- Pow
- RadToDeg
- RegEx
- RegExS
- Replace
- Resolve
- Reverse
- Right
- Root
- Round
- Running
- Select
- Sin
- Space
- Stem
- StrCmp
- String
- Sqrt
- Swap
- SysInfo
- Tan
- Trim
- Truncate
- TypeOf
- UCase
- URLEncode
- Val
- DOpusRT 参考手册
- 文件集合外部操作
- 检索文件和文件夹信息
- 元数据关键字
- Column 关键字
- SetAttr META 的关键字
- 文本过滤器
- 图标集
- 图标集 XML 定义文件
- 图标大小
- 图标名称
- 图标显示名称
- 图标类别
- DPI aware Icon Sets
- 本地化
- 图标图像
- 重命名宏语言