HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 g# e) m- [2 p" m7 X8 U
8 f' g8 H/ ~" ? public Object buildActions () {% y$ T8 }* p( e" [& h- p* z. Q
super.buildActions();
& s& ]! J& x' M. y! r % w) u! u& } R$ V/ Y0 t9 e
// Create the list of simulation actions. We put these in
2 t8 ]7 }! i( k- }+ h i. X // an action group, because we want these actions to be
- ~0 v4 [! Q! G2 { // executed in a specific order, but these steps should& l, }1 ?6 }! r2 U/ ~
// take no (simulated) time. The M(foo) means "The message
$ F7 n; p2 N* g* @7 a5 h // called <foo>". You can send a message To a particular
+ g6 g* A$ y" z. v# O& o: B // object, or ForEach object in a collection.- ]& C+ S" [6 j3 |( n3 I
; x, F) ?! N, _: }8 U; d // Note we update the heatspace in two phases: first run
* R5 G; s# h0 h7 s6 E // diffusion, then run "updateWorld" to actually enact the) l3 E6 u5 w- N2 Z
// changes the heatbugs have made. The ordering here is
% P6 G$ |4 ^- o* \8 G( t // significant!; |9 M/ |# n2 |
+ p. G7 r9 Q. X% M! F // Note also, that with the additional
5 J; _( }, x' W6 z // `randomizeHeatbugUpdateOrder' Boolean flag we can; L' Z; |5 j; \
// randomize the order in which the bugs actually run
0 X) j# W: |9 K" M1 ^) d // their step rule. This has the effect of removing any* t4 ? ^$ ? M2 m
// systematic bias in the iteration throught the heatbug
5 K4 y3 x' \1 J% P$ x // list from timestep to timestep
1 C& d. {9 W% I4 U 6 h, p6 z( k+ n2 d& n
// By default, all `createActionForEach' modelActions have
4 r; P9 e7 m2 Z) y. a // a default order of `Sequential', which means that the. J+ m) \% \! D( |* J/ D
// order of iteration through the `heatbugList' will be
$ z. W; o5 A; K3 {& q // identical (assuming the list order is not changed
; ` K5 w) ^- ?7 G // indirectly by some other process).; s6 J, E2 a& |6 R7 |$ V
6 A$ J. D0 Q) E3 l0 q3 k7 d, k9 S' R
modelActions = new ActionGroupImpl (getZone ());
1 \" C) V) s& B f/ M3 Z
% b7 u+ M7 P% l/ K try {
7 k' X* i' f: x9 I( A+ R modelActions.createActionTo$message
% a% U( e6 `6 ]/ h2 C (heat, new Selector (heat.getClass (), "stepRule", false));! ?! \& s, G* D4 [ G
} catch (Exception e) {7 g' ?& V5 a& t/ Y" H# v [
System.err.println ("Exception stepRule: " + e.getMessage ());7 J) h" Z# a5 K0 M
}5 r2 ^: ^$ D: O' b8 d3 ?/ g
9 w0 J5 p+ } i& `0 r6 F try {
' p& W* | M! N( a% A# U+ f) F& P9 K# m Heatbug proto = (Heatbug) heatbugList.get (0);; L; h9 Q& G# @' V% f" G
Selector sel =
* @, z/ `+ `7 z3 w new Selector (proto.getClass (), "heatbugStep", false);- R2 e& v# a: e/ ^" v. [
actionForEach =
: V4 A Q, Q( m modelActions.createFActionForEachHomogeneous$call
8 A& e( ?; c+ ~. G+ k0 X (heatbugList,2 _* [$ V. B. E
new FCallImpl (this, proto, sel,% P/ G( {/ N' w1 n- S1 w/ K
new FArgumentsImpl (this, sel)));
( J. F6 {6 b/ }! R# ~1 X } catch (Exception e) {
6 @7 T8 S2 V7 w- q e.printStackTrace (System.err);+ M. x- E* f: F! P6 r5 Q
} L1 C4 d" _8 R& ]9 L! R
' f C, `0 w. P8 V3 g. q$ P& o syncUpdateOrder ();$ |3 |, _/ ~" Y) m
" j% } ?# j6 n N try {
, M) q' Q: K- v; I modelActions.createActionTo$message
?7 T' I/ z: f' u+ U( @5 x0 `# s: L (heat, new Selector (heat.getClass (), "updateLattice", false));
: z: j1 `6 a' i* m* b7 C } catch (Exception e) {4 K6 ]9 g" P- ?' [
System.err.println("Exception updateLattice: " + e.getMessage ());5 c+ }( h5 C1 k: p( M1 @; W
}, d3 A" G# v+ _ D8 {
9 m" x K9 \. i! U5 N0 Y' W // Then we create a schedule that executes the+ k- d6 s1 W/ U5 m. q6 U
// modelActions. modelActions is an ActionGroup, by itself it* \2 q, ?$ c* I/ x* k: y. z' \- J
// has no notion of time. In order to have it executed in" S/ d: A+ N6 o- c# V1 y% f
// time, we create a Schedule that says to use the2 ?" |# e; D6 n. |, r
// modelActions ActionGroup at particular times. This5 V4 [* p6 B0 A, ]
// schedule has a repeat interval of 1, it will loop every% W1 C4 Y$ e% A6 q; E; z5 y
// time step. The action is executed at time 0 relative to9 K+ T' h+ v+ \. F$ ^
// the beginning of the loop.
0 W8 d& v* v$ J1 F' P; V: R" N: ]- }9 P
// This is a simple schedule, with only one action that is2 r0 |' [: V- k+ F0 O+ v5 V5 |$ q7 T
// just repeated every time. See jmousetrap for more
$ N: y/ H- X( ?7 B" j3 w$ e // complicated schedules.
% S7 z3 m. [( q: ~$ O+ Z0 x 1 {( V& C. B5 U; b5 o4 |# r) @! j
modelSchedule = new ScheduleImpl (getZone (), 1);
- o' V# r+ i- M4 ~) [ modelSchedule.at$createAction (0, modelActions);
- o) M! X4 ?* ^- T o5 W
. n& l s3 g4 p6 j- i$ k8 A return this;
+ q [0 `. @$ J) r } |