

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为多变体功能标志定义规则
<a name="appconfig-creating-multi-variant-feature-flags-rules-operators"></a>

变体规则是由一个或多个操作数和一个运算符组成的表达式。操作数是在规则评估期间使用的特定值。操作数的值可以是静态的，例如文本数字或字符串；也可以是变量，例如在上下文中找到的值或其它表达式的结果。运算符（例如“大于”）是应用于其操作数并产生值的测试或操作。变体规则表达式必须生成“true”或“false”才有效。

**操作数**


****  

| Type | 说明 | 示例 | 
| --- | --- | --- | 
|  字符串  |  UTF-8 字符序列，用双引号括起来。  |  <pre>"apple", "Ḽơᶉëᶆ ȋṕšᶙṁ"</pre>  | 
|  整数  |  64 位整数值。  |  <pre>-7, 42 </pre>  | 
|  浮点型  |  64 位 IEEE-754 浮点值。  |  <pre>3.14, 1.234e-5</pre>  | 
|  Timestamp  |  特定时刻，如 [W3C note on date and time formats](https://www.w3.org/TR/NOTE-datetime) 所述。  |  <pre>2012-03-04T05:06:07-08:00, 2024-01</pre>  | 
|  布尔值  |  True 或 false 值。  |  <pre>true, false</pre>  | 
|  上下文值  |  \$1 *key* 形式的参数化值，在规则评估期间从上下文中检索。  |  <pre>$country, $userId</pre>  | 

**比较运算符**


****  

| 运算符 | 描述 | 示例 | 
| --- | --- | --- | 
|  eq  |  确定上下文值是否等于给定值。  |  <pre>(eq $state "Virginia")</pre>  | 
|  gt  |  确定上下文值是否大于给定值。  |  <pre>(gt $age 65)</pre>  | 
|  gte  |  确定上下文值是否大于或等于给定值。  |  <pre>(gte $age 65)</pre>  | 
|  lt  |  确定上下文值是否小于给定值。  |  <pre>(lt $age 65)</pre>  | 
|  lte  |  确定上下文值是否小于或等于给定值。  |  <pre>(lte $age 65)</pre>  | 

**逻辑运算符**


****  

| 运算符 | 描述 | 示例 | 
| --- | --- | --- | 
|  and  |  确定两个操作数是否为 true。  |  <pre>(and <br />    (eq $state "Virginia") <br />    (gt $age 65)<br />)</pre>  | 
|  或者  |  确定是否至少有一个操作数为 true。  |  <pre>(or<br />    (eq $state "Virginia") <br />    (gt $age 65)<br />)</pre>  | 
|  not  |  反转表达式的值。  |  <pre>(not (eq $state "Virginia"))</pre>  | 

**自定义运算符**


****  

| 运算符 | 描述 | 示例 | 
| --- | --- | --- | 
|  begins\$1with  |  确定上下文值是否以给定前缀开头。  |  <pre>(begins_with $state "A")</pre>  | 
|  ends\$1with  |  确定上下文值是否以给定前缀结尾。  |  <pre>(ends_with $email "amazon.com")</pre>  | 
|  contains  |  确定上下文值是否包含给定的子字符串。  |  <pre>(contains $promoCode "WIN")</pre>  | 
|  in  |  确定上下文值是否包含在常量列表中。  |  <pre>(in $userId ["123", "456"])</pre>  | 
|  matches  |  确定上下文值是否与给定的正则表达式模式匹配。  |  <pre>(matches in::$greeting pattern::"h.*y")</pre>  | 
|  exists  |  确定是否为上下文键提供了任何值。  |  <pre>(exists key::"country")</pre>  | 
|  split  |  根据所提供上下文值的一致哈希值，对于给定百分比的流量计算为 `true`。有关 `split` 工作原理的详细说明，请参阅本主题的下一节 [了解拆分运算符](appconfig-creating-multi-variant-feature-flags-rules.md#appconfig-creating-multi-variant-feature-flags-rules-operators-split)。 请注意，`seed` 是一个可选属性。如果您不指定 `seed`，则哈希值是*本地*一致的，这意味着该标志的流量将被一致地拆分，但接收相同上下文值的其它标志可能会以不同的方式拆分流量。如果提供了 `seed`，则每个唯一值都可以保证在功能标志、配置文件和 AWS 账户之间一致地拆分流量。  |  <pre>(split pct::10 by::$userId seed::"abc")</pre>  | 