Java has had support for variable argument methods since version 5. Wouldn't it be cleaner to use that? For example, in LispObject.java there are several "execute" methods, one to support various numbers of arguments. In Java 5+ you could write:
public LispObject execute(LispObject ... arg) { whatever }
You call it like you do now, i.e. execute(a, b, c, d)
but arg gets an array of the arguments.
This way you could create one method that would handle virtually any number of arguments in one clean method.
I'm sure this technique can be used in more places too.
Blake McBride
On Sun, Jan 24, 2010 at 3:31 AM, Blake McBride blake@mcbride.name wrote:
Java has had support for variable argument methods since version 5. Wouldn't it be cleaner to use that? For example, in LispObject.java there are several "execute" methods, one to support various numbers of arguments. In Java 5+ you could write: public LispObject execute(LispObject ... arg) { whatever } You call it like you do now, i.e. execute(a, b, c, d) but arg gets an array of the arguments.
The reason for the existence of several overloads of the execute method is probably to avoid the creation of an array in the first place.
Alessio
Hi Blake,
On Sun, Jan 24, 2010 at 3:31 AM, Blake McBride blake@mcbride.name wrote:
Java has had support for variable argument methods since version 5. Wouldn't it be cleaner to use that? For example, in LispObject.java there are several "execute" methods, one to support various numbers of arguments. In Java 5+ you could write: public LispObject execute(LispObject ... arg) { whatever } You call it like you do now, i.e. execute(a, b, c, d) but arg gets an array of the arguments. This way you could create one method that would handle virtually any number of arguments in one clean method. I'm sure this technique can be used in more places too.
Yes. It can, however, the technique you're seeing is used to handle "wrong number of arguments" automatically: a function overrides only the execute methods with the number of arguments it knows how to handle. The other ones point to the original definition. Those are pre-programmed to generate "Wrong number of argument" exceptions.
We have a branch started which reduces the number of execute methods by creating a single array argument method. However, the impact of that is huge. We wanted to spend that time on improving other stuff such as the stuff we've been addressing over the past year. I've put the branch back on ice for now. The idea still lives, but we can gain much more from handling other issues at this moment.
I hope that explains and provides the right context!
Bye,
Erik.
armedbear-devel@common-lisp.net