HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 |. f) N4 w2 [- C" @) b) }/ C& M/ E8 U/ b
public Object buildActions () {
. O- Y: A; |* j/ ?/ t3 a0 J, a super.buildActions();. r! i1 L' T$ p @& j. X# B
4 B) `1 x$ s. T7 q- a+ E$ @ // Create the list of simulation actions. We put these in. e! `" b( a% W. t0 M9 ~
// an action group, because we want these actions to be$ n3 D1 w$ G& l6 i
// executed in a specific order, but these steps should
) p* `6 X' y$ M% [* I7 U // take no (simulated) time. The M(foo) means "The message
/ n: [8 w" n. X6 e% U // called <foo>". You can send a message To a particular
, a$ e# j' [. j# |" P9 P6 h // object, or ForEach object in a collection.# E+ S: _4 m3 A u3 x
& h# j# ~* v g Q* }; F
// Note we update the heatspace in two phases: first run+ J7 p I) z5 }2 W2 u
// diffusion, then run "updateWorld" to actually enact the
. {) k, R4 J9 N t // changes the heatbugs have made. The ordering here is
4 v& E, m2 C- [; K$ T/ e // significant!3 }0 _* L( e3 n: A0 G$ R2 Z- e5 P# K, |: H
" Z5 {; f# g% z1 A O: ] // Note also, that with the additional
7 c" w2 A5 w- U // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 r) X i0 ~) C- {: _ // randomize the order in which the bugs actually run
) V: O5 _5 O5 J4 F% ^+ u // their step rule. This has the effect of removing any
+ v; r: r# i' u% n6 M6 }2 ? ] // systematic bias in the iteration throught the heatbug
# b2 H6 g; d& R& ], v1 W // list from timestep to timestep& W' D5 |. D5 F+ D6 K- T' c
6 ]2 c) A8 \: n [9 h
// By default, all `createActionForEach' modelActions have, e8 b6 \0 u" k3 i& V- Y' z
// a default order of `Sequential', which means that the
7 G5 D, t# V* T# ^* t // order of iteration through the `heatbugList' will be
+ N1 J8 r. i% e/ h // identical (assuming the list order is not changed" f. `7 r6 @' G) }
// indirectly by some other process).
" c6 _! x3 d' p3 f
, K- S6 R: o6 M modelActions = new ActionGroupImpl (getZone ());3 p+ e; [( r, a z9 D* n; P
+ z. X: H' K3 E* W( m' M/ [ try {4 g. ^! A7 K: H- _. D$ _( _
modelActions.createActionTo$message; P" N5 f% o1 s0 c8 V
(heat, new Selector (heat.getClass (), "stepRule", false));
) j- b3 D- O2 {! Q/ T7 c( g } catch (Exception e) { n. m& q1 M6 X* y2 a
System.err.println ("Exception stepRule: " + e.getMessage ());
3 \, p) ]( [6 a0 e }! C, o& |- G4 P7 F: N4 `
$ Z- c% W' o/ x3 M* Q6 l try {
/ F( a0 h) t& s' }7 e5 m Heatbug proto = (Heatbug) heatbugList.get (0);( n# o6 ]5 G/ v3 d5 G3 Q9 Y
Selector sel = / t& H9 t; [' c* s7 l
new Selector (proto.getClass (), "heatbugStep", false);4 q% B/ f3 d T! `3 K N
actionForEach =$ ^3 V2 i8 f/ h, |3 U y+ z$ \
modelActions.createFActionForEachHomogeneous$call1 N4 e# O, c- z& N: G
(heatbugList,
2 ? l/ n8 R6 l* t2 c new FCallImpl (this, proto, sel,8 S+ S0 D8 d# f8 l
new FArgumentsImpl (this, sel)));# p/ d0 E9 }) @3 ]! x' l5 s6 I
} catch (Exception e) {
3 @" ~* E, S$ B# p: E e.printStackTrace (System.err);. Z" t/ g+ L& P1 z8 z
}3 ~) _/ Y6 G: r) {1 p) f. H9 F6 Z
4 t$ D1 f9 `' g* ^ syncUpdateOrder ();
, i3 z1 c4 F2 t# a+ K P, G$ _2 H: A7 w; u
try {0 C( j8 U. R# v
modelActions.createActionTo$message % X2 c% G! F2 s
(heat, new Selector (heat.getClass (), "updateLattice", false));
& m& @9 N5 i% u) C! S } catch (Exception e) {. }8 g6 r5 E; H( {/ }% q+ `
System.err.println("Exception updateLattice: " + e.getMessage ());7 m# _( n, p* ~8 F; F; ]( ?
}2 g5 Y- a# ?! t; ^) V; N
0 f; z& [1 H! S; T // Then we create a schedule that executes the
9 o) F6 y4 N. p4 H // modelActions. modelActions is an ActionGroup, by itself it7 k- l0 a+ p% f% d5 Z, {! H. j
// has no notion of time. In order to have it executed in
' o. i2 a8 E+ c4 g% b) i // time, we create a Schedule that says to use the
0 k* b. m/ D& P // modelActions ActionGroup at particular times. This$ h9 _" V2 F4 ]) \* y6 ]- d4 C# L
// schedule has a repeat interval of 1, it will loop every6 J2 }$ y; E, h( ~+ p- Z' V
// time step. The action is executed at time 0 relative to" k- l! {% G! t' T5 F
// the beginning of the loop.
; i! B8 l, \; a+ t. p0 z) \( D. O d: F+ x! S
// This is a simple schedule, with only one action that is
+ C/ v* C+ `0 e6 w1 U+ h: U // just repeated every time. See jmousetrap for more4 e( h$ q( [; V8 R8 L/ v) B* ]# K
// complicated schedules.
7 @9 d( r; I+ p
- N3 h9 {3 \$ v! R modelSchedule = new ScheduleImpl (getZone (), 1);
0 k# X% e3 ^+ S: p9 @+ R modelSchedule.at$createAction (0, modelActions);
9 S" T3 s" W, k7 @5 h: g. m 9 w+ K/ `$ v* \$ B; u
return this;/ }; i* R3 t$ P& l" ^
} |