As was mentioned very briefly on IRC[1], it might be nice if defstruct
objects (a.k.a. struct-basis, a.k.a. PersistentStructMap$Def) were
callable.
Currently you can:
user=> (defstruct point :x :y)
#=(var user/point)
user=> (struct point 42 11)
{:x 42, :y 11}
You can also use struct-map instead of struct, but I think the above
case is far more common. So why not make it the default if you call
the struct-basis? The attached patch allows:
user=> (point 42 11)
{:x 42, :y 11}
This is less wordy and has a nice declarative ring to it.
--Chouser
1. http://clojure-log.n01se.net/date/2008-10-22.html#15:20
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---
commit 7184734148c4961c4696ad968f53bb53d589e595
Author: Chouser <[EMAIL PROTECTED]>
Date: Tue Nov 4 23:59:13 2008 -0500
PersistentStructMap$Def extends AFn
diff --git a/src/jvm/clojure/lang/PersistentStructMap.java b/src/jvm/clojure/lang/PersistentStructMap.java
index 055448c..5fd868a 100644
--- a/src/jvm/clojure/lang/PersistentStructMap.java
+++ b/src/jvm/clojure/lang/PersistentStructMap.java
@@ -18,7 +18,7 @@ import java.io.Serializable;
public class PersistentStructMap extends APersistentMap{
-public static class Def implements Serializable{
+public static class Def extends AFn implements Serializable{
final ISeq keys;
final IPersistentMap keyslots;
@@ -26,6 +26,153 @@ public static class Def implements Serializable{
this.keys = keys;
this.keyslots = keyslots;
}
+
+ public Object invoke(Object arg1) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7)
+ throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11,arg12} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13)
+ throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11,arg12,arg13} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14)
+ throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11,arg12,arg13,arg14} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11,arg12,arg13,arg14,arg15} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11,arg12,arg13,arg14,arg15,arg16} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,
+ arg18} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19) throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,
+ arg18,arg19} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20)
+ throws Exception{
+ return construct(this, ArraySeq.create( new Object[]{arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,
+ arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,
+ arg18,arg19,arg20} ));
+ }
+
+ public Object invoke(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7,
+ Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14,
+ Object arg15, Object arg16, Object arg17, Object arg18, Object arg19, Object arg20,
+ Object... args)
+ throws Exception{
+ Object[] vals = new Object[args.length + 20];
+ vals[0] = arg1;
+ vals[1] = arg2;
+ vals[2] = arg3;
+ vals[3] = arg4;
+ vals[4] = arg5;
+ vals[5] = arg6;
+ vals[6] = arg7;
+ vals[7] = arg8;
+ vals[8] = arg9;
+ vals[9] = arg10;
+ vals[10] = arg11;
+ vals[11] = arg12;
+ vals[12] = arg13;
+ vals[13] = arg14;
+ vals[14] = arg15;
+ vals[15] = arg16;
+ vals[16] = arg17;
+ vals[17] = arg18;
+ vals[18] = arg19;
+ vals[19] = arg20;
+ System.arraycopy(args, 0, vals, 20, args.length);
+ return construct(this, ArraySeq.create( vals ));
+ }
}
final Def def;