> For the complete documentation index, see [llms.txt](https://chaoses-ib.gitbook.io/directory-opus/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chaoses-ib.gitbook.io/directory-opus/guan-fang-shou-ce/readme.zh-9.md).

# 求值器

求值器是一个简单的解析引擎，可以理解基本数学运算、布尔逻辑并提供许多函数来执行数字、字符串和日期操作并查询信息。因为它比 JScript 等完整脚本语言简单得多，所以可以在 Directory Opus 中的许多地方使用它来提供自定义功能，而这时完整的脚本会太慢。

求值器（目前）不是一个成熟的编程语言——例如，没有循环、用户自定义函数，除了 *if/elseif/else* 类型构造之外没有流程控制。大多数评估表达式都会很小——通常不超过一两行。

作为一个示例，假设你有一个文件命名系统，它包含作业 ID、日期和一个两位代码，并且你想在单独的列中查看它们。

```
作业-19230-20230605-XE.xlsx
```

一个相当简单的 [脚本加载项](/directory-opus/guan-fang-shou-ce/readme.zh-8/readme.zh-6/adding_a_new_column.zh.md)可以添加列来显示该信息，但这种方法有三个主要缺点：

* 复杂性。即使是一个简单的脚本也需要一定的样板代码来初始化它并将列添加到 Opus，以及实际生成列数据的代码。
* 速度。全面的脚本每次调用时都会有一定的开销，而当你为可能数百个文件多次调用脚本时，时间开销可能会变得明显。
* 局部性。脚本加载项驻留在外部文件中，虽然它们可以作为 Opus 配置的一部分进行备份，但你仍然必须确保它们使用正确的文件扩展名创建并放置在正确的文件夹中。

使用求值器，可以在配置用户界面中通过使用 [求值器列](/directory-opus/guan-fang-shou-ce/readme.zh-5/readme.zh/readme.zh-2/evaluator_columns.zh.md) 功能来解决上述问题。其中配置的列使用求值器来提供其数据。向求值器表达式提供了关于每个文件的信息，它可以使用各种函数和操作来处理数据并返回结果供用户显示。

例如，从上述文件名中提取日期的评估表达式可能如下所示：

```
作业日期 = RegEx(名称, "作业-(.+)-(.+)-(..).xlsx", "\2")；
作业日期 = Left(作业日期, 4) + "-" + Mid(作业日期, 4, 2) + "-" + Right(作业日期, 2)；
返回作业日期为日期；
```

求值器可以用于计算结果的各种上下文，为它提供一些值——在上述示例中，值 **名称** 提供了所讨论文件的文件名。

求值器提供了一些函数，表达式可以调用这些函数。在上面的第一行中，**RegEx()** 函数用于从文件名中提取日期。

表达式的结果将作为日期返回给调用方（使用 **As** 运算符）——但是要从字符串转换为日期，字符串需要采用特定格式。表达式的第二行使用另外三个函数（**Left()**、**Mid()** 和 **Right()**) 将日期字符串分割为年、月和日。然后在三部分之间用连字符对其进行重建，将其保留为可以转换为日期的格式。
