HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 {7 x, F A3 G! X+ _2 B/ n9 d x7 I3 t, _% y3 x( k; s/ M- R' ?8 f
public Object buildActions () {7 n# Z+ @# M) i
super.buildActions();
. s- x! L$ }+ z ( P: x) _+ H- n* `9 c/ V2 P! h
// Create the list of simulation actions. We put these in
- x8 C/ V2 }7 w // an action group, because we want these actions to be& j$ M! r/ j" N1 y( Y
// executed in a specific order, but these steps should
) \ `" i) I. l% E // take no (simulated) time. The M(foo) means "The message! y/ b6 q9 B- a1 h/ X: i
// called <foo>". You can send a message To a particular d o8 I7 M! `# D, U4 Z) h( O
// object, or ForEach object in a collection.7 C; o) v: o8 F' U
* z! B+ ]% F" g // Note we update the heatspace in two phases: first run
: h% O) u9 C( t8 U8 K // diffusion, then run "updateWorld" to actually enact the
3 H4 i( B0 \/ R0 ?6 g5 i0 Y // changes the heatbugs have made. The ordering here is
; Z. h3 w8 {% h8 G! v X' ^- _2 ` // significant!/ g; X) L$ M4 z
# K, e \+ b9 O; |. ? // Note also, that with the additional
# v2 v; |, o0 Q' ~ // `randomizeHeatbugUpdateOrder' Boolean flag we can
! o' {, ~* J# V t9 Q // randomize the order in which the bugs actually run# @7 @; b; H$ I* M$ P% P
// their step rule. This has the effect of removing any; _# z0 c! ?6 e" p# U7 k1 G9 ~: `, Q
// systematic bias in the iteration throught the heatbug
! ~/ F8 n, B, \/ Y5 B5 {; k // list from timestep to timestep# A* G' S' C" S5 o* p2 b; E
; D" X4 W) E( X) @" T7 L/ V // By default, all `createActionForEach' modelActions have7 k* {4 W' j7 t# V$ F- h
// a default order of `Sequential', which means that the! W/ m: ^( P' m3 ~
// order of iteration through the `heatbugList' will be; n. ` Y% @! R0 ]" ~
// identical (assuming the list order is not changed
& b# Z) u" e4 k# Y3 ?' y4 V% Y // indirectly by some other process).
& k0 [; Z' R2 ~+ N3 }- b ]8 N U5 v! A5 t- M
modelActions = new ActionGroupImpl (getZone ());
: B- J% ~( |2 j1 d7 ]: d" B% z6 Q4 R& ?. E; q. C. g
try {
# |. R% }6 Q* x: V2 N# p9 Z modelActions.createActionTo$message
8 g/ T5 p* w6 I. S (heat, new Selector (heat.getClass (), "stepRule", false));
9 s$ Z b1 `( d- v+ T& s# J } catch (Exception e) {
4 u* i# Y* s$ I0 G Y5 l x. t9 a System.err.println ("Exception stepRule: " + e.getMessage ());% b5 k s" r \- ]" w$ ^
} r! D v# n8 z8 b2 J3 F8 Y: {% F2 G0 n
3 O+ v& f8 \) x2 _
try {5 e/ y/ ]1 p$ j8 B$ U2 |" q+ [
Heatbug proto = (Heatbug) heatbugList.get (0);$ _& S" G8 _# t% Y0 x1 Z e% y
Selector sel =
0 |) g* G% v7 _7 c new Selector (proto.getClass (), "heatbugStep", false);
2 A4 t) D9 l. o* _; z# R' ^ actionForEach =9 H4 M B3 G8 n5 D
modelActions.createFActionForEachHomogeneous$call
7 Q2 q: D( Q) V! G (heatbugList,0 r9 e, ^- G# ~1 X
new FCallImpl (this, proto, sel,
( y& @( K* d4 s; y. i: I! W1 T new FArgumentsImpl (this, sel)));
5 H L) \# U0 K* Z, @ } catch (Exception e) {
; q$ Q" j" l7 u7 c" e e.printStackTrace (System.err);; M7 V8 I" B9 H7 D
}
9 w# Z6 W) g/ H' I 2 {( \0 g A! z" J9 p
syncUpdateOrder ();( ~; ^' w$ n! t& P) H" Y; F
3 _" v3 V- G o+ q" Z
try {
& Z2 z0 a4 t( @: L% V- R7 p& M) k modelActions.createActionTo$message # T j, k' I1 c1 Y5 b
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 j, p% D* @: B4 {! w c1 s } catch (Exception e) {
& Y6 d0 ~# K/ w* @( `) X- Z6 M System.err.println("Exception updateLattice: " + e.getMessage ());
8 D% ]* D; \4 C* @% ?9 [ h) z4 O( i }3 e% H/ W& E, f2 `( e
! J. Z' D4 b* o4 j5 h! X2 A E
// Then we create a schedule that executes the/ Q: ?, [5 s9 ~) @. k
// modelActions. modelActions is an ActionGroup, by itself it4 m! }# f$ |# g% |1 V' p
// has no notion of time. In order to have it executed in" ^& R* w8 e4 F7 @- J- R
// time, we create a Schedule that says to use the+ O! w4 G% L y/ J3 Y2 g/ s
// modelActions ActionGroup at particular times. This
1 @6 B% f$ _2 N4 |& U // schedule has a repeat interval of 1, it will loop every7 j; X0 T5 _8 b( X( ~& @2 M+ s
// time step. The action is executed at time 0 relative to
Q2 C- f& O! n- x6 t // the beginning of the loop.
( Y4 o9 T; ]8 o
5 L6 V* G. k: U# m- d, F$ Z // This is a simple schedule, with only one action that is- @7 g) s, m' s% H( u# r
// just repeated every time. See jmousetrap for more1 z5 ~# n/ Q, H6 L- ~
// complicated schedules.& D- d0 c$ P! N5 h7 g" t& z
2 b: P5 z" ^3 N5 _; r2 S modelSchedule = new ScheduleImpl (getZone (), 1);# z- ?) A9 |! G; u% T
modelSchedule.at$createAction (0, modelActions);
: l4 V& \, K6 `( p! U# P. s y 2 v) B( o9 I" e: z+ A% p
return this;
5 e, @6 m) m) i5 j- ]# Y } |