HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 O3 v7 s! n6 }/ y$ D# X
% h/ R W9 D+ p. `
public Object buildActions () {. I# r- S) I1 M% ` D0 Q4 y3 s
super.buildActions();+ \7 \ k' b( c9 H. f( F9 N5 r/ u
8 D! O4 ^8 g5 X0 z p2 R1 `
// Create the list of simulation actions. We put these in
% c' @" X' c7 ~6 l- s3 Z* h! N) h$ f // an action group, because we want these actions to be
( }! D* q; `2 u* W# u // executed in a specific order, but these steps should6 X6 y, z. W3 x# W' [- d8 B7 H1 `
// take no (simulated) time. The M(foo) means "The message
% r6 u1 @$ t3 n6 [ // called <foo>". You can send a message To a particular
5 G1 ~7 A$ g# }! D9 u6 b8 T // object, or ForEach object in a collection.
d5 B2 |6 \: }$ f/ [: P+ f5 A
3 l1 \( [3 ? p) Z3 Z* Q // Note we update the heatspace in two phases: first run
. m& @3 N* j% k5 m7 V // diffusion, then run "updateWorld" to actually enact the
7 R% e# U2 f/ p, w# r // changes the heatbugs have made. The ordering here is
* a3 W! S$ m1 p( v' }: ~- [ // significant!
. K9 }/ Z. O5 H; R
! U+ F4 |! y/ K1 F/ ~" ~ // Note also, that with the additional8 T$ A6 N; F& ?/ u& M- m7 p% N
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# T, e% [4 u! R/ n Y1 h4 H // randomize the order in which the bugs actually run
/ {+ @0 z3 J( u8 F( H' E% l4 b3 H // their step rule. This has the effect of removing any4 |$ `) r9 p3 J2 G
// systematic bias in the iteration throught the heatbug0 y3 l- B. G/ `0 z
// list from timestep to timestep, c: w" X8 s5 o: e2 G
" r& d+ N8 D- S$ P
// By default, all `createActionForEach' modelActions have
* Y5 c1 G& z- X5 I // a default order of `Sequential', which means that the
- {3 l8 n' Y, E // order of iteration through the `heatbugList' will be2 T6 m/ l2 V2 U& I& }$ S
// identical (assuming the list order is not changed
6 Z1 _& e' a) Z5 Y% x1 M @; _ // indirectly by some other process).
2 V/ g! _1 K" I) n s# y% W/ N + v) }0 L Y0 r9 a9 H
modelActions = new ActionGroupImpl (getZone ());( c! D- C$ w/ E9 d; b
9 S, h& r7 `# W* g. U try {
6 o4 I$ Z/ J9 u$ a+ P' x modelActions.createActionTo$message3 E5 ^1 C, Y9 a/ ~1 T1 W& k
(heat, new Selector (heat.getClass (), "stepRule", false));
5 v: ^' O# a# n3 E } catch (Exception e) {6 h( a% v2 x8 X/ j4 R
System.err.println ("Exception stepRule: " + e.getMessage ()); d* g4 F; o; j7 `
}
# G6 r3 D% C& z; z6 U! u
4 h9 E, v# L% r7 \ u9 O# Z try {7 b, d+ U2 d: |0 C- u5 h
Heatbug proto = (Heatbug) heatbugList.get (0);8 c% a) f2 A% m0 l* W0 a
Selector sel =
( M& k0 U, \) ? new Selector (proto.getClass (), "heatbugStep", false);# ]: ?0 e2 p9 f6 h
actionForEach =
5 i+ o6 t/ g/ F1 ]. q7 H" ` modelActions.createFActionForEachHomogeneous$call+ I; e9 u, j8 R: @% b% o1 E+ v8 u& Q& l
(heatbugList,7 |* o* ^% e5 w2 y& [7 A( T1 `( |
new FCallImpl (this, proto, sel,
n/ B, W e( E6 r new FArgumentsImpl (this, sel)));
& j7 ]8 ?; w M5 X0 H& ]1 d" p } catch (Exception e) {
" c; I8 Q+ d2 G; d! C1 U8 } e.printStackTrace (System.err);% d& G8 c8 t5 v3 A1 c( J5 D
}5 y8 T$ L$ W8 y3 w7 r$ \) r) d6 a
" {% z1 y& [4 W
syncUpdateOrder ();7 v: F* t/ e, M% n, F3 A" j1 m$ R
0 ?* t6 s8 L/ T8 B4 g: |8 n try {
' f, l# x/ i0 D6 M6 H modelActions.createActionTo$message
% f7 c% G1 Y$ D! H' g/ a5 h (heat, new Selector (heat.getClass (), "updateLattice", false));7 K1 j* S( s3 k8 R8 B- ?
} catch (Exception e) {9 h8 q) R, u% \3 s0 T) F. G2 o
System.err.println("Exception updateLattice: " + e.getMessage ());9 |$ F$ |" k* G _
}; I" v$ b2 j' O
+ r8 b ~$ M# W2 K- a* ~ // Then we create a schedule that executes the. d4 W# V4 s4 D. }
// modelActions. modelActions is an ActionGroup, by itself it. H3 l6 B# ?6 f
// has no notion of time. In order to have it executed in
9 K" ~. m; `" H+ e N% D$ t // time, we create a Schedule that says to use the
% m% F$ \ Q3 H: O! e$ Z4 k& d // modelActions ActionGroup at particular times. This1 }+ i# b/ U. ?$ k9 d
// schedule has a repeat interval of 1, it will loop every# v, D2 `: j0 M8 V3 o
// time step. The action is executed at time 0 relative to
- ?( o; g# v4 v // the beginning of the loop.8 _: o" M# S1 x9 }& }
. m C- M$ G1 Q
// This is a simple schedule, with only one action that is9 W" o; H) ` c0 [4 H& E* z
// just repeated every time. See jmousetrap for more
! v) o: B- B( C# J$ u) A0 H' Z1 b( P% d // complicated schedules.
8 c' I" w% _: Q. E) I
! D. y, m3 c/ [, `6 a" j modelSchedule = new ScheduleImpl (getZone (), 1);& V; q" y( j! k$ S
modelSchedule.at$createAction (0, modelActions);, [9 P0 x, P' x \1 v
5 c, a: n) n0 H/ R5 j6 l
return this;2 \+ K$ Q: F" n3 x; H) W8 s
} |