You can create UDXs that have the same name but different signatures and return types. This process is called overloading the definition.
For example, assume that you have a function called greatest_value that can take two or three input integers and that returns the greatest of the input values.
Some sample (and partial) function follow:
CREATE FUNCTION greatest_value(INT64, INT64) RETURNS INT64... CREATE FUNCTION greatest_value(INT64, INT64, INT64) RETURNS INT64...
If a user calls greatest_value with two input values, the system uses the first (two-argument) function. If the user specifies three input values, the system uses the second (three-argument) function.
A drawback of overloading is that it usually results in increased maintenance effort, because each change must be made to several UDXs.