> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kasoftware.com/llms.txt
> Use this file to discover all available pages before exploring further.

# arc:enum

> 迭代对象的属性、分隔列表、值范围或多值属性的值，并对每个元素执行正文。

export const siteNameShort = "知行之桥";

arc:enum 关键字可以用于枚举对象中的属性，分隔列表，数值范围和多值属性中的值。arc:enum 的主体会执行要迭代集合中的每个元素。

## 参数

* **item**：要对其属性进行迭代的对象的名称。
* **attr**：指定迭代哪些属性的匹配表达式。例如，“arc:\*”。也可以使用该参数来迭代多值属性的值。
* **prefix**：枚举对象基于的前缀。
* **expand**：布尔值，指定当遇到多值属性时，arc:enum 如何执行。如果 expand 设置为 true，arc:enum 的主体会将属性中的每个值都执行一次。如果为 false，所有值将会串联在一个字符串值里，只执行单次迭代。默认情况下，arc:enum 不会展开所有值。
* **sep\[arator]**：如果 expand 参数为 false，则用来连接多值属性值的分隔符。除此之外，如果未定义列表分隔符，则使用分隔符对列表中的值进行标记。默认值为换行符“\n”。
* **list**：要枚举的分隔值列表。例如，如果列表为 “violet，indigo，blue，green，yellow，orange，red” 且分隔符为 “,”，那么对每个颜色都将会执行 arc:enum 的作用域。
* **range**：以升序或降序枚举时字母或字符的范围；例如，“a..z”，“Z..A”。

<Note>可以指定 **range** 参数或 **item** 参数，但不能同时指定两者。属性按字母顺序枚举。</Note>

## 控制属性

* **\_attr**: 被迭代的属性名称。当对多值属性进行迭代时，属性名称将相同，只是会包含索引作为名称的一部分。使用哈希符号（#）将名称和索引分隔开。例如，name#1，name#2等。
* **\_index**：属性出现在对象中的索引或当前枚举元素在列表中的位置。
* **\_value**：被迭代的属性的值。对于一个多值属性，expand 和 separator 参数设置决定了 \_value 是对一个属性值的引用还是对所有属性值的引用。
* **\_count**：在一个属性或一个列表中值的数量。
* **\_separator**：列表中用来分隔值的分隔符。

## 示例

显示对象名为“input”的属性名称和属性值：

```xml theme={null}
<arc:set item="input" attr="Greeting" value="Hello" />
<arc:set item="input" attr="Goodbye" value="See ya" />
<arc:enum item="input">
  [_attr] is [_value]
  <br/>
</arc:enum> 
```

```
goodbye is See ya greeting is Hello
```

使用 arc:enum **list** 和 **separator** 参数枚举一个值的列表。例如，下面的代码列出了在 colors 属性中指定的颜色：

```xml theme={null}
<arc:set attr="colors" value="violet, indigo, blue, green, yellow, orange, red"/>
<arc:enum list="[colors]" separator=",">
  [_value] 
</arc:enum>
```

要枚举一个范围内的值，使用 **range** 参数，下面的代码列出了从 a 到 z，从 Z 到 A，以及从1到25的字符集：

```xml theme={null}
<arc:enum range="a..z">
  [_value] 
</arc:enum>
<arc:enum range="Z..A">
  [_value] 
</arc:enum>
<arc:enum range="1..25">
  [_value] 
</arc:enum>
```

要枚举一个多值元素的所有值，使用 **\_attr** 参数来指定多值属性并且将 expand 设为 true：

```xml theme={null}
<arc:set attr="foo.email#1" value="joe@mycompany.com"/>
<arc:set attr="foo.email#2" value="john@mycompany.com"/>
<arc:enum attr="foo.email" expand="true">
    ([_index]) [_attr] -> [_value]
</arc:enum>
```

上面的示例最终输出了以下的内容：

```
(1) email#1 -> joe@mycompany.com (2) email#2 -> john@mycompany.com
```

## 另请参阅

* [arc:break](./op-arc-break)：中断 [arc:call](./op-arc-call) 或 arc:enum 迭代。
* [arc:continue](./op-arc-continue)：跳过本次 [arc:call](./op-arc-call) 或 arc:enum 迭代。
* [arc:first](./op-arc-first)：为第一次迭代提供特殊的处理。
* [arc:last](./op-arc-last)：为最后一次迭代提供特殊的处理。
