NamedArguments.ceylon
"A named argument list.
Any number of named arguments, followed by a (possibly empty) ordinary list of arguments.
Examples:
{}
{ name; size = width * height; }
{
Head { title = pageTitle; }
Body {
for (paragraph in paragraphs)
P(paragraph)
}
}"
shared class NamedArguments(namedArguments = [], iterableArgument = ArgumentList())
extends Arguments() {
"The named arguments."
shared NamedArgument[] namedArguments;
"The trailing argument list.
This argument list is interpreted as a single
argument to a parameter of type [[Iterable]]."
shared ArgumentList iterableArgument;
shared actual <NamedArgument|ArgumentList>[] children = concatenate(namedArguments, [iterableArgument]);
shared actual Result transform<out Result>(Transformer<Result> transformer)
=> transformer.transformNamedArguments(this);
shared actual void visit(Visitor visitor)
=> visitor.visitNamedArguments(this);
shared actual Boolean equals(Object that) {
if (is NamedArguments that) {
return namedArguments == that.namedArguments && iterableArgument == that.iterableArgument;
} else {
return false;
}
}
shared actual Integer hash
=> 31 * (namedArguments.hash + 31 * iterableArgument.hash);
shared NamedArguments copy(NamedArgument[] namedArguments = this.namedArguments, ArgumentList iterableArgument = this.iterableArgument) {
value ret = NamedArguments(namedArguments, iterableArgument);
copyExtraInfoTo(ret);
return ret;
}
}