HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! m. c7 J2 o2 t+ T
$ J' r! ^8 w/ G# t, c' G" W- b+ U public Object buildActions () {
8 {# @9 v; b+ j" B* k' s* }4 n super.buildActions();
! a2 W$ f a# _& _
( [. A" T* _ J2 }, \ // Create the list of simulation actions. We put these in% `6 g Z2 I1 W5 c( a6 P, Y
// an action group, because we want these actions to be! N/ l% I, B }& d5 A9 ~
// executed in a specific order, but these steps should/ d4 Y3 }5 {0 T8 P( F8 j8 E
// take no (simulated) time. The M(foo) means "The message7 T2 S% x" _. p3 l' S) m6 ?. d
// called <foo>". You can send a message To a particular
' T$ A6 h( M# T! U6 F // object, or ForEach object in a collection.
: I; Q- P2 R% h4 \
# n& K. Q2 I# U2 c4 z! G; W1 f& V( S // Note we update the heatspace in two phases: first run1 B( K9 S* V) y7 d! L* B( `
// diffusion, then run "updateWorld" to actually enact the
5 Q8 i& z t& p% q: }" X9 }* ]9 o+ a // changes the heatbugs have made. The ordering here is
) o/ ]9 y+ Q0 B Z // significant!
/ d" W! O0 a. y* C
2 x$ N1 m& @; m5 O' {1 { // Note also, that with the additional
! s& u9 o/ @( ?7 X: q& U // `randomizeHeatbugUpdateOrder' Boolean flag we can
' K _8 b7 n2 P; e! c- U- V // randomize the order in which the bugs actually run6 K* G- N( a. C* e
// their step rule. This has the effect of removing any
4 J" L; Z3 u. Y2 B // systematic bias in the iteration throught the heatbug. H! F. ^2 |# d9 K1 m5 E
// list from timestep to timestep' c8 e% C+ w3 ?' }! u1 }
/ h, ?! ^8 p0 T // By default, all `createActionForEach' modelActions have
8 J* ^( {/ @/ k7 ]" i // a default order of `Sequential', which means that the5 `1 t/ e- G8 t8 R8 C9 l
// order of iteration through the `heatbugList' will be x0 @( e7 F/ K) }4 T8 ? S/ c
// identical (assuming the list order is not changed, B3 x* _9 `) H/ {4 F! d
// indirectly by some other process).! ^) i5 e B2 G! y
: g" A% i/ ^5 Q+ m% o9 Y1 g9 U modelActions = new ActionGroupImpl (getZone ());+ C0 H3 ^$ ~' Q+ e
' Y5 ?, _) [( m9 `
try {$ Q( j& N9 F c5 N" I2 b; I
modelActions.createActionTo$message
; B+ t; P! G4 t5 `3 Z (heat, new Selector (heat.getClass (), "stepRule", false));
% P4 |# @( j* g6 r4 l } catch (Exception e) {
$ t1 @& ^7 H# ]. {8 ^ System.err.println ("Exception stepRule: " + e.getMessage ());
7 K6 W% c# o: _ p8 v5 r1 m }+ O9 y; o; Z, ^" s
' V: |/ L0 L! ` try {
) e1 r. |& {- ]: f Heatbug proto = (Heatbug) heatbugList.get (0);
6 @0 t' Y6 u, X! D Selector sel =
0 u; C! Y9 j' K7 ]- x! l. a new Selector (proto.getClass (), "heatbugStep", false);
( r3 F! N- d4 { actionForEach =
- s* R% j2 F( x8 @4 y. ] modelActions.createFActionForEachHomogeneous$call
3 t2 d5 q/ g+ A2 U& m (heatbugList,
" O) U( w4 U$ a5 W2 ]$ ] new FCallImpl (this, proto, sel,9 a: ~- f9 ?. F t9 V
new FArgumentsImpl (this, sel)));0 \+ J6 ^5 M& M1 z* ?2 |
} catch (Exception e) {
& L" i# y9 L' @2 m) Z: `0 z e.printStackTrace (System.err);
( q" S) `0 s: X# o. v' Z }. h( E3 I9 y/ `. y
8 V9 M+ T7 I* f$ S% K) c" X
syncUpdateOrder ();
6 S, k7 q! M+ v6 A t+ j8 E/ B
" O Z8 o U7 D3 j2 Q/ ~- l try {5 Z" L% f( j6 K/ m
modelActions.createActionTo$message A; Y. s/ v9 y5 V/ C# u9 W
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ o& B( o/ }/ M2 f } catch (Exception e) {( Y+ ]( q" B$ K+ G5 y, Q8 l L
System.err.println("Exception updateLattice: " + e.getMessage ());
3 Z& ^( d0 X- S) F }
, z* m1 L% A. j0 u4 f
y( {" V: r- Q0 Q9 ^ // Then we create a schedule that executes the6 P2 G& F! p1 o V
// modelActions. modelActions is an ActionGroup, by itself it3 P% C8 r5 ?' { o! j; l
// has no notion of time. In order to have it executed in5 w" S4 `4 o2 m7 k% `# C
// time, we create a Schedule that says to use the# }: d* S& [, D1 I1 [6 {) y: q
// modelActions ActionGroup at particular times. This. J, g" P, [0 ^+ S
// schedule has a repeat interval of 1, it will loop every
8 q4 P9 h" B8 p8 _0 N" J. \ // time step. The action is executed at time 0 relative to
z4 V' S1 Y8 ~! N3 x: }. | // the beginning of the loop.
2 H$ @1 l+ v1 ^% n$ G: X# q- t* @+ _7 o& s2 ?) k/ D
// This is a simple schedule, with only one action that is
1 A6 v3 S) ?# V9 [+ |8 T: _, }3 R2 c // just repeated every time. See jmousetrap for more! I0 L# O/ m+ J3 O" T' J! J
// complicated schedules.' U2 a* R% a; Y F! F N B u* R
2 {6 K2 A0 D: g1 A
modelSchedule = new ScheduleImpl (getZone (), 1);% `/ X+ Y+ l8 J3 o. o
modelSchedule.at$createAction (0, modelActions);
4 |5 b) V* ~! |
5 s6 l/ T X5 _- s8 \0 D2 C return this;$ v$ F) N' o3 S! }( q
} |