HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 @$ h, N/ |( R6 E& B) A2 z e* r' w( H) |: a; E
public Object buildActions () {1 m5 h! L h- R% j. j8 B: i2 C
super.buildActions();
( S/ @) f: u. t5 ^& D& f
9 M: d- e* z) p, J* W( H0 H // Create the list of simulation actions. We put these in
" X" _- X) V8 I" g1 h // an action group, because we want these actions to be9 V$ G7 R! I% @+ f5 O& d, r! S
// executed in a specific order, but these steps should
% _9 T9 C. F/ F+ U. i1 A6 Q // take no (simulated) time. The M(foo) means "The message
# q) n8 l+ I% h+ H( _; I- q$ O9 y1 R // called <foo>". You can send a message To a particular. Q! m) ~7 A4 \$ Q4 U9 H
// object, or ForEach object in a collection.! t: Z; k% Y( `+ u3 y6 N }8 M
W8 D9 c K' ~4 X9 T0 M
// Note we update the heatspace in two phases: first run2 @! I" u2 X( x3 `$ d2 u
// diffusion, then run "updateWorld" to actually enact the: ~1 q+ c+ k: k* K# U) A' g
// changes the heatbugs have made. The ordering here is8 }4 c6 e: n5 h$ i7 B4 X ~
// significant!
( a/ _' E8 t) b5 C3 W) y$ _4 Z
" C; ]3 N5 o+ M: E$ G // Note also, that with the additional
- |0 S: x4 ?, f* f. [7 @ b6 p // `randomizeHeatbugUpdateOrder' Boolean flag we can
* t2 r X3 p" {* P3 j* J // randomize the order in which the bugs actually run
3 {2 P/ x" X6 Z$ I/ p' u // their step rule. This has the effect of removing any
% @8 \; T0 i" m; n0 \ // systematic bias in the iteration throught the heatbug
0 Z# B+ [, F: e0 |" q // list from timestep to timestep
; u; \8 J! K( N& z 7 R( o w4 I: E3 Y0 { x
// By default, all `createActionForEach' modelActions have! t, L1 E3 e; C5 D+ x
// a default order of `Sequential', which means that the6 K) ^( [* y/ \+ U8 S
// order of iteration through the `heatbugList' will be$ l' P4 B6 I6 I! y7 O+ A: B
// identical (assuming the list order is not changed
3 z& G( ]: C& ? l! Z& }: _% x // indirectly by some other process).
+ I9 K, G/ S m9 H) e " d8 ?, F6 N l3 ~. J
modelActions = new ActionGroupImpl (getZone ());- N( Y C3 \8 n+ r
0 {3 C$ l) h. c: }; z4 D
try {
* @7 s) ]7 p- B$ @, l modelActions.createActionTo$message
- n: G+ O( V1 o. d1 X: v (heat, new Selector (heat.getClass (), "stepRule", false));
" a1 x% E$ H+ W5 I } catch (Exception e) {/ m$ {! I9 C5 w# n2 W X$ w8 t8 l
System.err.println ("Exception stepRule: " + e.getMessage ());1 j2 g( u9 Y% Y6 [( U
}
4 u9 f3 `7 G8 { M4 i; y9 \
; ]& Y8 t/ s, I1 I try {* i; N* r+ ]1 E1 @/ G) B9 k
Heatbug proto = (Heatbug) heatbugList.get (0);+ v# |( H. M; v6 v3 w
Selector sel =
" I! }/ G, O t8 N* S new Selector (proto.getClass (), "heatbugStep", false);
1 U6 Z% \9 {1 ^+ b, x( e& ?; b0 U actionForEach =; W$ {7 @' {' `' y
modelActions.createFActionForEachHomogeneous$call
# L- m& Z9 A* i (heatbugList,
1 {" ] z; s# H* N: X6 J new FCallImpl (this, proto, sel,
/ b/ l" ]5 J' v- T0 C0 o; L new FArgumentsImpl (this, sel)));
7 }) m, b3 R7 U* i) K } catch (Exception e) {- i* s2 T: o4 [. z$ w
e.printStackTrace (System.err);
7 |* \; ?# W$ w9 f& w. H# ` }( \* e& @$ `6 u! \6 m* D1 I
9 i# n% Y2 ]) S o/ I; v2 F syncUpdateOrder ();
9 v0 V8 [! }, u8 e6 S* W7 s! C) e5 b3 }! k3 w3 X
try {
1 ~" t# }$ @+ e. o2 H0 s modelActions.createActionTo$message ' q$ X8 R9 `" w5 o
(heat, new Selector (heat.getClass (), "updateLattice", false));
. _2 I3 N: R% x$ U) f0 E } catch (Exception e) {
$ i% M- Q4 I+ [" |% k* _) y System.err.println("Exception updateLattice: " + e.getMessage ());
m. _ Z. N$ d+ M$ I& N1 U }5 o L' |- G, R; d- e& u- F$ g+ C
5 o' ~4 U! {; {+ n: ^- {% O, w- d. J( A // Then we create a schedule that executes the4 @, ? e1 F1 |2 R; Z
// modelActions. modelActions is an ActionGroup, by itself it
! o, S+ w- D. M- i# O // has no notion of time. In order to have it executed in
$ x: R; S$ }- q$ W // time, we create a Schedule that says to use the
/ v# n9 _5 J4 |: m0 |/ T2 k" V // modelActions ActionGroup at particular times. This; Q0 ~' ^: n4 ^
// schedule has a repeat interval of 1, it will loop every
/ \% a: u6 U: [ // time step. The action is executed at time 0 relative to
1 u6 g7 ? ?9 [/ Q // the beginning of the loop.5 Y# Y; d! Z$ _* A- E
* W" e- w9 T+ x* N" t! M // This is a simple schedule, with only one action that is$ q$ Q2 p! p; }4 F1 K
// just repeated every time. See jmousetrap for more. l% P& O2 I3 c* S+ ~: F
// complicated schedules.6 Z P1 Y' V" ?5 S, U' R2 h x9 S
1 T& C, I. c" b7 _) Z7 o, v modelSchedule = new ScheduleImpl (getZone (), 1);* h9 O e/ j2 T
modelSchedule.at$createAction (0, modelActions);1 a, T3 d2 q- w$ t: [+ C# I; O1 L
) ~8 H2 Y9 [) g
return this;
8 a9 V0 I! ~7 W. C2 x } |