A parameter list.
Examples:
() (String text, Integer length = text.size) (Element+ elements)
It would seem reasonable to instead declare the parameters of this class like this:
class Parameters(RequiredParameter[] required, DefaultedParameter[] defaulted, VariadicParameter|ParameterReference variadic)
Note that variadic
must have the type VariadicParameter|ParameterReference
, not just VariadicParameter
,
because a variadic parameter can also be just a reference, and declared in the body of the function or class.
And this is where the problem comes in:
(param)
In this parameter list, is param
a required or a defaulted parameter?
In other words, is this
Parameters { required = [param]; }
, orParameters { variadic = param; }
?To decide this, you need to look into the body of the function,
and check if the declaration of param
has a regular or a variadic type.
This is a semantical distinction, not a syntactical one,
and in general we can’t expect tools that operate on an AST
to be able to make this distinction.
Instead, we have just one list of parameters; the separation into required, defaulted, and variadic ones may then be done in later stages of AST processing.
Anything
Object
Parameters
Node
Object
Anything
no subtypes hierarchy
Initializer |
Parameters(Parameter[] parameters = ...) Parameters:
|
Attributes | |
children | Source Codeshared actual Parameter[] children The child nodes of this node. Refines Node.children |
hash | Source Codeshared actual Integer hash The hash value of the value, which allows the value to be an element of a hash-based set or key of a hash-based map. Implementations must respect the constraint that:
Therefore, a class which refines In general, Note that when executing on a Java Virtual Machine, the
64-bit Refines Object.hash |
parameters | Source Codeshared Parameter[] parameters The parameters. |
Inherited Attributes |
Attributes inherited from: Node |
Attributes inherited from: Object hash , string |
Methods | |
copy | Source Codeshared Parameters copy(Parameter[] parameters = ...) Parameters:
|
equals | Source Codeshared actual Boolean equals(Object that) Determine if two values are equal. For any two non-null objects x == y Implementations should respect the constraints that:
Furthermore it is recommended that implementations
ensure that if A class which explicitly refines Note that an implementation of Refines Object.equals |
transform | Source Codeshared actual Result transform<out Result>(Transformer<Result> transformer) Transform this node with the given If you have a Refines Node.transform |
visit | Source Codeshared actual void visit(Visitor visitor) Visit this node with the given Refines Node.visit |
Inherited Methods |
Methods inherited from: Node |
Methods inherited from: Object equals |