SelectConcat
In bxl, Select = bxl.SelectDict | bxl.SelectConcat. bxl.SelectConcat is a list-like object that represents a select. One example of this type is:
["--flags"] + select({
    "root//constraints:a": ["--foo"],
    "root//constraints:b": ["--bar"],
    "DEFAULT": ["baz"]
})
You can:
- Iterate over the values of this object (e.g. 
for item in select_concat.select_iter():) - Get the length (e.g. 
len(select_concat)) - Check its type using 
isinstance(select_concat, bxl.SelectConcat). 
Sample usage:
def _impl_select_concat(ctx):
    node = ctx.lazy.unconfigured_target_node("root//:select_concat").resolve()
    attr = node.get_attr("select_attr")
    for value in attr:
        if isinstance(value, bxl.SelectDict):
            for key, value in value.items():
                ctx.output.print(f"{key} -> {value}")
        else:
            ctx.output.print(value)
    ctx.output.print(attr[0])
SelectConcat.length
SelectConcat.length: int
Returns the length of a SelectConcat, defined as the number of items being concatenated at the select level (not the total number of elements across all lists).
For example, [1, 2] + select({"DEFAULT": [3, 4]} returns 2 instead of 4.
Note: You can use len() to get the length too.
SelectConcat.select_iter
def SelectConcat.select_iter() -> list
Return the values of the SelectConcat.
Sample usage:
def _impl_select_concat(ctx):
    node = ctx.lazy.unconfigured_target_node("root//:select_concat").resolve()
    attr = node.get_attr("select_attr")
    for value in attr.select_iter():
        ctx.output.print(value)