HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( r' a& B& Q, g
$ s. K( g( r( d I7 `0 c/ M7 Y, Q public Object buildActions () {, g. J# o! ^. k. |, F. p
super.buildActions();
& s6 ~: U: O' F- y 6 Y- y. D. |: E9 Q2 p' p
// Create the list of simulation actions. We put these in
% r& }$ u& `# y3 m7 F // an action group, because we want these actions to be
. h' ~ t) d. k( i7 Y' f // executed in a specific order, but these steps should
* J5 k4 ]+ F+ u$ j3 ?* _: X8 T // take no (simulated) time. The M(foo) means "The message
5 g2 D0 j7 z9 `$ I3 e; H; u // called <foo>". You can send a message To a particular
1 y$ e2 d1 N, Y# E5 U' ^- A, w8 e // object, or ForEach object in a collection.. D1 z, v) z' B, @) U' R9 {
" G1 R5 G% Z8 S2 H9 H // Note we update the heatspace in two phases: first run
\+ t: S! T+ `' i3 S // diffusion, then run "updateWorld" to actually enact the4 I3 |$ n2 N; \5 d4 b2 Y
// changes the heatbugs have made. The ordering here is
1 | {& w) ?7 w: O // significant!4 H: I% s5 U) X" S
0 p! I4 b3 w1 L. A // Note also, that with the additional9 p$ z, y @% j5 p \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) Y) L' G" [& A! w- g# D$ s5 v // randomize the order in which the bugs actually run
" @$ {) ?/ Z* M // their step rule. This has the effect of removing any
/ Y$ v& \' S' i // systematic bias in the iteration throught the heatbug) r/ _# q/ j5 r! m4 G
// list from timestep to timestep
3 H9 Y' L9 Y( H0 |0 j# ~ / X: _: ~% p) k9 z. z) g; A- D2 {
// By default, all `createActionForEach' modelActions have% J. O2 `) e6 ~; y; T
// a default order of `Sequential', which means that the& B9 y. a% _8 s; L
// order of iteration through the `heatbugList' will be7 g' T! Q; c- X9 b
// identical (assuming the list order is not changed& m* X3 P& N- _& ?9 |2 z% \
// indirectly by some other process)./ \& e) e& N" T0 O5 I, n
( _: N" S! H$ {* j& _
modelActions = new ActionGroupImpl (getZone ());
8 Z5 F1 A& y2 T6 H0 y% F- ]0 a( I$ X |- f* q% B, J& ^! R
try {
! p p" U, a2 Y modelActions.createActionTo$message
: [* |* D, n8 N% C (heat, new Selector (heat.getClass (), "stepRule", false));7 `/ o& ^( C2 S0 P$ W4 f1 Q
} catch (Exception e) {/ R; S, _; F( u% E
System.err.println ("Exception stepRule: " + e.getMessage ());
- ]/ G' t2 I4 e }. I( c2 J0 R, ?1 c! Y" W$ z
& R1 O2 D' d5 Z0 w; ^
try {
- t% q+ Q6 E% q6 B4 }& m! D | Heatbug proto = (Heatbug) heatbugList.get (0);* f8 m% v' J8 [5 z8 M
Selector sel =
W( R$ t5 F- {/ o3 E+ l7 T new Selector (proto.getClass (), "heatbugStep", false);
/ N& ]+ P1 C+ ~6 D6 P6 @ actionForEach =
# X# ~, c- e4 n" y1 i modelActions.createFActionForEachHomogeneous$call
) X9 o! Y7 Q6 O, B (heatbugList,
7 m9 S+ @6 i. g8 \" z: R new FCallImpl (this, proto, sel,% h" l5 l' v8 k! U# b! w. W
new FArgumentsImpl (this, sel)));, ]" h- q8 g0 l2 D+ D; |/ j
} catch (Exception e) {5 g$ W. R; `" a: K# D3 ~
e.printStackTrace (System.err);3 ^2 r, H6 k5 e0 n
}
5 [3 [& z0 ~0 E" q ( X1 N* o2 d% o" V
syncUpdateOrder ();
# E# ?0 p) _/ M6 }$ n$ V1 O* d6 l) i
1 Y8 J( e1 P7 Z6 q% g0 V2 b try {2 x' D/ t1 Z ]+ i0 {) U5 O; o' C
modelActions.createActionTo$message 8 m B3 K# L) Y) M) j4 a
(heat, new Selector (heat.getClass (), "updateLattice", false));
- J; _/ i4 K1 z* K+ J9 a ~/ _1 `. n2 x } catch (Exception e) {$ M3 c4 X! D) \* [
System.err.println("Exception updateLattice: " + e.getMessage ());2 H! x x/ g( a8 Q j, o% _; ?' _1 k
}
- L6 R- L! B: l1 [4 a
5 b9 W* n5 f* C // Then we create a schedule that executes the
3 g/ l+ t- _6 ?3 n( w: S // modelActions. modelActions is an ActionGroup, by itself it9 g4 E" `" T: M
// has no notion of time. In order to have it executed in% A9 l; W% n! [1 L0 {% P9 B9 r
// time, we create a Schedule that says to use the- t3 V5 ]' N$ `6 I+ x' ]
// modelActions ActionGroup at particular times. This' `0 f7 y1 s& c
// schedule has a repeat interval of 1, it will loop every5 \$ [/ @+ @. _. f2 T
// time step. The action is executed at time 0 relative to U* u2 G, w* |% ]4 }# O
// the beginning of the loop.0 `; j: Y3 D- Q* t1 a, g
! S0 n. ~ v+ Y; M. a! U% m // This is a simple schedule, with only one action that is% R0 u/ w: g; @7 r# k
// just repeated every time. See jmousetrap for more
- O: S* ]- t. i0 J! b // complicated schedules.
: ?: F8 a/ O1 a# R! ^1 L 6 ? a& _, U9 _! }0 B5 H! j
modelSchedule = new ScheduleImpl (getZone (), 1);; b0 t+ A+ {; h1 s( D
modelSchedule.at$createAction (0, modelActions);
1 l: b2 c/ e2 s8 e6 ^
. w% B8 Z, } n L# n return this;0 m2 F- a* m; f* P5 Q
} |