HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; Z5 v% w3 | h+ `. j
" b/ x: i* B( u$ F public Object buildActions () {
8 y3 `6 ]6 v/ g. C super.buildActions();2 h% [- q4 k4 e5 _/ S% j( u! I
# u# N$ b2 ], R
// Create the list of simulation actions. We put these in
3 y& s! E! k6 \* W; W! a // an action group, because we want these actions to be, e- @! d' Z6 D, p
// executed in a specific order, but these steps should
# t" k- x) |3 @- D4 F9 K+ S // take no (simulated) time. The M(foo) means "The message( n- @2 Z5 I+ ?0 l, ~& J
// called <foo>". You can send a message To a particular
6 z) a5 R7 w" z, x& Y w& f( a9 o // object, or ForEach object in a collection.
# D2 Z1 r4 H0 Z. P7 S- S V2 v * C5 V/ \4 e# t) N' ~
// Note we update the heatspace in two phases: first run
7 I7 c; F w) h L // diffusion, then run "updateWorld" to actually enact the
: ~! ?/ K- x. z! I // changes the heatbugs have made. The ordering here is4 z# h1 h( I& p& b, A! X9 t7 D
// significant!+ y( f" Z, }1 f; Q: q" |$ T
( r* y4 C6 h2 N( d0 N' Z
// Note also, that with the additional
7 V: m" @" w" Z! ?& O) c4 r! c // `randomizeHeatbugUpdateOrder' Boolean flag we can; L4 ], u0 V9 @$ |
// randomize the order in which the bugs actually run
7 l! X6 m1 W1 }. N t2 Q // their step rule. This has the effect of removing any1 ~& [9 V* M6 y, z6 q8 G
// systematic bias in the iteration throught the heatbug' [0 z1 f7 T% w3 ?% o( o5 C$ H' S
// list from timestep to timestep) v3 ]) y5 F: P
& N; `/ B* r0 u9 d- w
// By default, all `createActionForEach' modelActions have9 Y2 t) ^$ U' G' q. ~
// a default order of `Sequential', which means that the
6 a9 A/ g3 ^: y; l) ^ h // order of iteration through the `heatbugList' will be
: q4 Z- n- x# @3 c. ]4 G* I // identical (assuming the list order is not changed8 m: l! A. T* d4 o- A
// indirectly by some other process).. Q" Y! P3 n9 }6 R3 G
. e; ?- \ O" q1 `/ n5 C% Z
modelActions = new ActionGroupImpl (getZone ());$ t7 P, {! j- C8 x
( ?& R; r5 M; N* G* E5 D X5 ^& H- i% J
try {
6 n5 d+ M! q* X0 ~. d: s3 V0 c( b modelActions.createActionTo$message+ t+ f+ ^9 l5 l4 p
(heat, new Selector (heat.getClass (), "stepRule", false));
+ w& B. V: U" K7 p6 i } catch (Exception e) {0 E* N6 G8 s3 P3 i
System.err.println ("Exception stepRule: " + e.getMessage ());3 a" ?0 T. u) w3 P( S
}2 c' D _/ r: z% E. _
# C6 x/ s% N9 B; L+ x
try {
' J1 z( W9 V: r: g Heatbug proto = (Heatbug) heatbugList.get (0);' I" T- Y( W/ l" ^ `5 z8 ^- v
Selector sel =
) M" t& \" I2 p; D new Selector (proto.getClass (), "heatbugStep", false);
1 i8 o) U) o1 u7 @9 |/ P actionForEach =5 _1 r' t+ w8 N" q; w9 k5 f
modelActions.createFActionForEachHomogeneous$call
6 p, p' w4 f# } w% x1 ^8 U (heatbugList,! d) ~; R4 C2 i
new FCallImpl (this, proto, sel,
" C+ K/ v* J8 P; e; o new FArgumentsImpl (this, sel)));
+ O% c0 y4 l# S) [ } catch (Exception e) { I6 [ y4 v) j( M# V
e.printStackTrace (System.err);
0 Q/ J7 f, ~% s/ y b/ b }
4 G& V+ B6 v" {; ?- ?5 s
' E! v, e) g, F- h) q syncUpdateOrder ();
1 L, J3 g. a# N. N
r9 i% B* ^! g8 C9 l! g/ r try {. x# i" g& {* N: u/ f( F6 A
modelActions.createActionTo$message * R3 |# E& u5 _/ g$ |: \
(heat, new Selector (heat.getClass (), "updateLattice", false));
$ H8 T) F" q0 p8 `; b+ \ } catch (Exception e) {
6 C, N7 Y' S8 F$ }# A/ k System.err.println("Exception updateLattice: " + e.getMessage ());* @% y; \* p2 O( R( T
}
4 k% w4 a9 O+ v7 V+ A9 ?( c) e - l9 P* Q; l9 s: O
// Then we create a schedule that executes the* ]: _% c" O3 m* i. h9 v5 c- e
// modelActions. modelActions is an ActionGroup, by itself it
S8 P. p+ J; Z( } // has no notion of time. In order to have it executed in, s# a: T' z8 I0 x& G, f
// time, we create a Schedule that says to use the2 ~) Y5 }( K4 j
// modelActions ActionGroup at particular times. This
/ f) c q( [ d // schedule has a repeat interval of 1, it will loop every" N3 |" G: d) z. R% {0 W0 [
// time step. The action is executed at time 0 relative to) q: K; |) ?5 M; v
// the beginning of the loop.# S/ x" U+ A0 w9 b) l" _! k
( V% I: x$ H, T, y; |# @) Y
// This is a simple schedule, with only one action that is
7 @ a1 @; `" l/ U* }( ^ // just repeated every time. See jmousetrap for more
& d( l2 _; Y& _, V3 J // complicated schedules.0 P" h( {1 G! J" `" g& F6 ~
& E6 L1 r1 W+ E1 T( p4 e
modelSchedule = new ScheduleImpl (getZone (), 1);
* x H! m; I! B. ] modelSchedule.at$createAction (0, modelActions);
( m+ J, I9 _$ C% C
- P7 O, v: F. m8 L1 g3 h5 Q return this;+ P& G- ]8 {2 I. r
} |