HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
Q5 o; J3 Q) J
; O l& o5 d' u) O- n public Object buildActions () {
7 ]7 s6 c6 i% ]1 o4 d* c super.buildActions();
8 y9 U% [! h! l8 H5 Y, m! i
( O5 Y7 w# a! h m // Create the list of simulation actions. We put these in- ~' k" u% t3 L
// an action group, because we want these actions to be- P6 c/ c" \7 f1 {7 K8 x. F* R
// executed in a specific order, but these steps should
2 @( a7 ?# k9 S6 ~7 }# g+ L // take no (simulated) time. The M(foo) means "The message5 \1 Z6 I0 g: O. T! ?1 M( E
// called <foo>". You can send a message To a particular. m$ b6 p3 _; C, ?7 {" K
// object, or ForEach object in a collection.
2 G# l7 ]5 D# v
) }/ i: ]' j1 n7 } // Note we update the heatspace in two phases: first run, I5 ~" j" ~- J! R
// diffusion, then run "updateWorld" to actually enact the
; O/ Q' \3 v q+ @7 f6 y0 Q- J // changes the heatbugs have made. The ordering here is0 `0 n7 l& s( Z: d
// significant!2 e* T! i0 A$ y4 ~8 q4 r
7 F% c2 t6 S* |, _; z, a: z8 w4 ] // Note also, that with the additional
4 y8 u8 \# d( {- Z' t c+ ` // `randomizeHeatbugUpdateOrder' Boolean flag we can
q% @" F/ B; a# D% T# ~ // randomize the order in which the bugs actually run
* W( Z' R) I) \8 ^4 c% }! Z2 b/ b, i // their step rule. This has the effect of removing any. T. H5 G2 y8 z& ^6 e
// systematic bias in the iteration throught the heatbug3 B/ h" ~7 J- O5 L2 b( g
// list from timestep to timestep
9 j. Q4 S2 b' `5 i5 M7 | : Y0 T# o& |8 C. T# n1 D
// By default, all `createActionForEach' modelActions have
: e) W% f+ A! ] // a default order of `Sequential', which means that the
P) S8 i; L! ^$ o // order of iteration through the `heatbugList' will be
$ u. D$ z' R0 G // identical (assuming the list order is not changed
. E: Q1 M- {/ I1 ^$ v1 ? // indirectly by some other process).6 ?. ^+ U9 X! z+ I6 n
8 v. l6 T. z5 c% Y/ I3 n( g modelActions = new ActionGroupImpl (getZone ());
( z p& ?9 m: h/ B8 [$ e# Y S. F$ X3 |- }# C4 l+ \
try { ^1 D* d+ x" o$ y {% Z
modelActions.createActionTo$message( f" B4 _" z0 {1 j' c
(heat, new Selector (heat.getClass (), "stepRule", false));0 R I1 c9 p- N" q- L" E' F
} catch (Exception e) {
1 `$ I" T" [/ n: B% C5 f System.err.println ("Exception stepRule: " + e.getMessage ());, U1 `) r7 g! _ h
}
, H1 h2 l( p9 }& g0 [ s0 Z4 p/ z) W+ F9 e5 O
try {
k' |" d9 ^% Y! Y Heatbug proto = (Heatbug) heatbugList.get (0);; F$ }" v9 w6 ^* P
Selector sel =
& h2 j# c) ^* C8 J- T9 J8 l# ] new Selector (proto.getClass (), "heatbugStep", false);
8 G0 d f2 ~9 y: o, B4 ]: { actionForEach =; Y: n4 [" K/ r0 K' j
modelActions.createFActionForEachHomogeneous$call
) z$ X( t% a4 l+ ? L T* S (heatbugList,
/ ^/ s2 ~2 \4 b4 R! M5 [ new FCallImpl (this, proto, sel,
/ y5 m3 {: }/ ^4 O. T new FArgumentsImpl (this, sel)));
6 C9 F' N+ k( x) G } catch (Exception e) {& u$ ^- F% U$ r# f% L
e.printStackTrace (System.err);& D2 i% B/ p6 j: ?% }6 J
}3 j: l1 A% y" F1 J
- Y6 D# V; r$ M* w* x
syncUpdateOrder ();
+ [2 d. @8 m! Z& ?7 D4 E% Z
# A9 n( q' R' y0 |, f" r try {
7 U( q& H+ `: ^+ p/ H3 S modelActions.createActionTo$message
/ \) z$ F! V* h2 m6 ?, p; `$ O (heat, new Selector (heat.getClass (), "updateLattice", false));* Y$ l) [; |% y" I0 r
} catch (Exception e) {) _4 S L2 [6 H5 q$ E: ~4 Z( i
System.err.println("Exception updateLattice: " + e.getMessage ());/ ?, i& M' o: E- K- _# K
}
* v% L) D2 W* T$ z4 d4 t, Y6 d N6 R) z, u7 H9 d0 P
// Then we create a schedule that executes the% v2 W% ~0 b/ D' M' ]
// modelActions. modelActions is an ActionGroup, by itself it/ e* m- [( d" K: `, N6 l) t
// has no notion of time. In order to have it executed in; K6 W4 J' G; _2 J0 J' a! d( J! t
// time, we create a Schedule that says to use the& X0 J7 J) a+ P) Y2 y; S
// modelActions ActionGroup at particular times. This) \* N3 l( S+ p" n
// schedule has a repeat interval of 1, it will loop every4 \& ~7 w) D' ?1 {) Q
// time step. The action is executed at time 0 relative to- [, b3 P- Z6 W" B6 U8 Y( y
// the beginning of the loop.
$ u" y# {" K' q! b5 i+ b7 ?) N, A' ^& M8 q# {5 P/ X
// This is a simple schedule, with only one action that is
( O: T( f6 g: y // just repeated every time. See jmousetrap for more
8 N1 o" u/ F4 p8 x // complicated schedules.) y% `: m2 \3 `
. d; \# t! i' k4 f! f modelSchedule = new ScheduleImpl (getZone (), 1);
% I4 D" h& A( t- f+ }# Y4 a' T* [9 [ modelSchedule.at$createAction (0, modelActions);) F7 z2 E+ f" M8 @- O
. N& h6 H5 W7 ]( a& U return this;
6 s C; d; C9 ^+ M& q6 f2 @ } |