HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: j1 D& t' \* L& m+ |
* o& i' C/ h" p7 r+ V
public Object buildActions () {2 o. f. T. K2 W1 j' @7 b
super.buildActions();
, d: s) s z, H. d( g& u
4 ], K% V7 I1 u- H/ @; @ // Create the list of simulation actions. We put these in
& B. S0 j# b# S; W( T // an action group, because we want these actions to be
( I4 M! I1 a B/ f+ e' t2 N // executed in a specific order, but these steps should% ~8 c6 G6 j# @5 M) f
// take no (simulated) time. The M(foo) means "The message. o. i, Q/ C% K7 U/ D) @) d7 ?
// called <foo>". You can send a message To a particular
' ^! P- E% f, b0 K // object, or ForEach object in a collection.
. J P9 v Q% H1 B2 e " z& ?( \7 c, q
// Note we update the heatspace in two phases: first run
0 V9 Z! T( J+ T$ U9 t/ h // diffusion, then run "updateWorld" to actually enact the
i) b5 L# d8 |7 k/ l5 p // changes the heatbugs have made. The ordering here is( l) H! L5 h1 C v8 K4 M6 x
// significant!. p- B. s) {; {) I
, p! X7 m' X9 Y, ^# y* s2 Q, [
// Note also, that with the additional: S: _2 c" r% `5 i8 [
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 b$ w; V" ^+ V3 l6 ` // randomize the order in which the bugs actually run3 r: T9 n8 j( n
// their step rule. This has the effect of removing any
+ P5 ^; V4 h4 L: g7 m // systematic bias in the iteration throught the heatbug
+ ~/ |' u8 y! m5 g N$ t+ v // list from timestep to timestep; T1 V5 A' L6 H/ H
5 J$ s0 T' [& J. r; Y V# l8 \ // By default, all `createActionForEach' modelActions have
@( ^: m9 O, c0 D // a default order of `Sequential', which means that the
4 |. E: O. h8 Q" N0 T* h" O+ N! m j // order of iteration through the `heatbugList' will be2 r) N: ^" {: w, P
// identical (assuming the list order is not changed
" e- }# o( g5 Z1 {0 W4 D7 F! k* Y // indirectly by some other process).
$ k7 c) ?8 j% K4 D# J % ?- f; E% S/ E$ S- P; c, h6 W* a
modelActions = new ActionGroupImpl (getZone ());5 `; t$ x+ O: ^0 J& M/ V/ a: e7 {5 q
0 }0 y/ r7 \" F h, T U try {( p% w2 N2 G! Q5 G6 i/ b1 L
modelActions.createActionTo$message$ P+ \1 L. J+ \9 w) e* T+ V# z
(heat, new Selector (heat.getClass (), "stepRule", false));
0 A c2 d0 o, \, Y } catch (Exception e) {1 T8 W l% ^! u& \" J U
System.err.println ("Exception stepRule: " + e.getMessage ());" g! y( B' s4 z4 \* ^
}
; M% u' h; @4 Y6 }' H. ^- ]+ x# ?* A) l/ ?& X/ s' P* X9 x. L
try {' J0 p. ?5 L8 b) a0 M# b2 @3 ?
Heatbug proto = (Heatbug) heatbugList.get (0);* C: j4 `# y* }+ u3 G8 \& o, r! k! O, Y1 ]
Selector sel =
6 E* ]+ z+ g6 F3 P/ Y" S new Selector (proto.getClass (), "heatbugStep", false);$ r8 i g, Q6 V! t4 Z2 J! Q! J/ e
actionForEach =( k, Q) i2 j; j8 u+ r+ Z
modelActions.createFActionForEachHomogeneous$call
, x7 b6 v. ]. b) U# |( Q (heatbugList," m/ H8 Y" W% [3 _8 ^
new FCallImpl (this, proto, sel,
5 _4 O+ \# S2 g5 ?4 S/ O: n: T new FArgumentsImpl (this, sel)));
' p/ R; L' Y& Q- d; ^ } catch (Exception e) {
" X. u4 [. y$ B" U) k4 L9 |2 n e.printStackTrace (System.err);
5 p5 D* B3 _$ Z& \ }' o3 c* j* \ H# I/ T) N& d
$ |% z; v1 g5 z; w( y3 X syncUpdateOrder ();" D9 V% ~. c! W" D
) @ T8 j, |: O' o' J( G4 N try {
3 v {! I* A5 B* Y9 s modelActions.createActionTo$message $ x- b O9 j% x: c3 }
(heat, new Selector (heat.getClass (), "updateLattice", false));
& k6 j. y# B1 g" d } catch (Exception e) {- _) W- D. K/ i; G
System.err.println("Exception updateLattice: " + e.getMessage ());# d, e& I8 R; K i
}
# o8 w! e2 d9 s5 R8 e" y
2 J4 {( W! W' V) t4 P4 V // Then we create a schedule that executes the
" r' z. d' G+ R // modelActions. modelActions is an ActionGroup, by itself it& H0 F# N3 l6 S8 f W9 Z
// has no notion of time. In order to have it executed in
5 P% l3 a" p1 v1 ]( {, Q7 H' q# g // time, we create a Schedule that says to use the4 _ w' X4 W: {- t J
// modelActions ActionGroup at particular times. This
, \+ @7 U4 }: B9 p // schedule has a repeat interval of 1, it will loop every
6 R2 l, M' o3 b7 d8 v1 p // time step. The action is executed at time 0 relative to
6 ^9 R1 U& n: e5 l9 t! o // the beginning of the loop.7 a+ R. |' ]; v- @& P5 O( w# q
8 t1 y( Y& A8 n, T0 e3 I; N // This is a simple schedule, with only one action that is7 `" S5 B) P/ R# h" Y$ S
// just repeated every time. See jmousetrap for more$ j$ y7 X+ [( D8 h
// complicated schedules.5 C7 E7 k6 r0 F2 Y+ F
7 s3 g/ d* X5 W6 T modelSchedule = new ScheduleImpl (getZone (), 1);! ?* @+ r1 W7 I( l1 I9 ]
modelSchedule.at$createAction (0, modelActions);
0 a, U& m9 \* O. l6 D% b ) c& N6 E. l9 W0 |
return this;
, ~' I# ~ U5 u, G' [' l7 Z } |