HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: {& I! k( Q; b" ], f5 R
' i; u) E7 n- p) r; s9 g' e, T public Object buildActions () {1 V9 n% E W% g
super.buildActions();! k. e) E, d, h+ y; |
: U3 d- A1 h$ L" r8 ?4 U. c- } w
// Create the list of simulation actions. We put these in
% x$ Z3 T% A. P# M4 S // an action group, because we want these actions to be5 ^7 z* {5 t* Y
// executed in a specific order, but these steps should( R( ` t: H' i B: T
// take no (simulated) time. The M(foo) means "The message. S3 A% M- W; v
// called <foo>". You can send a message To a particular
, T, N1 J: J" {" u0 C4 h% d; ? // object, or ForEach object in a collection.
# i2 ?2 u% l/ m7 g
; a+ ]6 {- y* g3 q/ I: M: Q // Note we update the heatspace in two phases: first run H- g* L% f/ T2 L, P
// diffusion, then run "updateWorld" to actually enact the0 I9 g- j3 e7 f" b! R7 j2 d; c
// changes the heatbugs have made. The ordering here is
$ |) |( ]6 U0 x5 |9 w- ~7 D // significant!5 ?: A/ ^( w/ \% W
0 Q/ ^4 |8 \$ u$ Q. ]7 m
// Note also, that with the additional
1 a8 M& }0 Z# m* t6 l // `randomizeHeatbugUpdateOrder' Boolean flag we can
* X2 g' n8 T6 W8 h4 G/ D // randomize the order in which the bugs actually run
! v; J R6 W( o // their step rule. This has the effect of removing any
! n) Y/ { g- i7 p5 [; w // systematic bias in the iteration throught the heatbug m4 }1 A3 N% Q9 ^' S0 H
// list from timestep to timestep
5 u6 g; K/ S" i7 q9 V! {/ d( X5 u
! U: Y% n: i3 V- b, |8 n' { // By default, all `createActionForEach' modelActions have
; M u& Z' L+ s3 A. Q: g // a default order of `Sequential', which means that the. @6 X) G3 G& ^( n/ i
// order of iteration through the `heatbugList' will be
( @1 ?$ s X! d H0 _; h5 s // identical (assuming the list order is not changed
; I2 a3 w& r1 p" p- |0 p* C) [( `' U // indirectly by some other process).
, A- X7 H" J5 P/ h" V% p * c, z" {1 F8 C3 I1 e1 l2 Y" o
modelActions = new ActionGroupImpl (getZone ());+ V$ O4 L* Q5 ?& S5 c: Y2 S7 o8 ~
6 x/ p0 P6 V" p4 U
try {& X2 D3 P( @( z* o
modelActions.createActionTo$message% a6 t2 J$ j) j$ g V2 A5 P3 h: t
(heat, new Selector (heat.getClass (), "stepRule", false));
/ n( n! l# _2 E; ]7 A0 {- q0 ^: y$ f } catch (Exception e) {' q7 G2 P A6 r3 f @
System.err.println ("Exception stepRule: " + e.getMessage ());% j& F+ ~* X/ A9 Q* v8 {. `- v- ^' L
}
' q" }# }/ k; {; o
B* W& Y+ X4 Z+ o try { j# m% ]& J8 }* r0 }
Heatbug proto = (Heatbug) heatbugList.get (0);
% }' R2 ^7 Q- ?8 j4 H Selector sel =
& T1 W& p! D. Q" Q new Selector (proto.getClass (), "heatbugStep", false);1 C2 F" F1 T- u5 {0 C
actionForEach =7 [' j- Z# R/ v1 A1 g2 Z
modelActions.createFActionForEachHomogeneous$call: [, W$ P" y6 ]3 _
(heatbugList,
. ?$ i# K w: ~5 s. g9 b new FCallImpl (this, proto, sel," g7 T, D9 a% V7 s4 N) D& s
new FArgumentsImpl (this, sel)));+ o: u$ |3 l. c+ a+ H: I8 j
} catch (Exception e) {
0 p% |' c3 m; j# {% e& F$ f e.printStackTrace (System.err);
% M* M* f8 {" a }
+ l% y, H. \* j, _$ b! @
- K1 E8 `% }/ L) X" A2 N syncUpdateOrder ();, c6 _. ?) P, S/ j/ r
1 I4 k% t# N! I; c
try {
6 m; j* U- C5 B u modelActions.createActionTo$message
M8 W4 C+ o" [7 C1 g2 f, b. k (heat, new Selector (heat.getClass (), "updateLattice", false));
( N; a) E9 |% V3 A U" _/ p } catch (Exception e) {& G7 @& a/ ~9 A9 Y& W3 P
System.err.println("Exception updateLattice: " + e.getMessage ());" W8 B! g4 }7 F5 J/ u- `# s; {+ B
}
8 A8 i1 `9 z$ }5 c+ t7 _ M ! Z5 T' _4 B" I
// Then we create a schedule that executes the: p6 ~4 Z/ j6 q+ h$ R: E. {
// modelActions. modelActions is an ActionGroup, by itself it4 `; \6 | I. O& f
// has no notion of time. In order to have it executed in- D- g F& V$ Q# n. `+ @! I$ h
// time, we create a Schedule that says to use the7 @+ I9 f" J3 T3 h
// modelActions ActionGroup at particular times. This- e- m# |5 N9 m
// schedule has a repeat interval of 1, it will loop every
: p; A0 _. ?1 {) t: p // time step. The action is executed at time 0 relative to( |' q8 R1 j+ L
// the beginning of the loop.* G$ @; U7 d& G
5 y& |' K4 X# @ q r // This is a simple schedule, with only one action that is
& i, R# i% ~8 c3 a' R& V3 H // just repeated every time. See jmousetrap for more1 Y. E3 c% h9 _0 C
// complicated schedules.
; F& C# u3 z N+ a6 n) T/ D
4 M0 N' E& \6 N) @5 T modelSchedule = new ScheduleImpl (getZone (), 1);
6 A1 ?* q, I" j modelSchedule.at$createAction (0, modelActions);# c+ ^9 C# m5 Y1 `
' i8 e9 `1 {+ l2 K return this;1 R+ C% Z) S3 q# V% H$ y" E
} |