HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: p- v* w8 O! _, h @+ q$ r: }" w2 Z0 q8 Z% W
public Object buildActions () {" C& i" O0 J. W- r. x* l7 @" f7 i- o
super.buildActions();6 }4 [# p9 i o( W
& F; e, E/ J; b# \- {! ]3 r
// Create the list of simulation actions. We put these in m. u: V% {/ o
// an action group, because we want these actions to be
& F# H) d4 O( L9 e // executed in a specific order, but these steps should
! e( X$ T3 b7 p& U, z // take no (simulated) time. The M(foo) means "The message
- _; ]1 T2 T5 B' M0 G+ R" p" a9 _5 Q // called <foo>". You can send a message To a particular% W% r6 p8 ^; B, E) V: }
// object, or ForEach object in a collection.
# `% w' V* }: P3 i+ N+ b
- X1 y4 d$ h' t) r/ H6 v p" C2 j% f // Note we update the heatspace in two phases: first run
1 n1 R3 T9 ?) w( }/ z' R // diffusion, then run "updateWorld" to actually enact the
# T7 r4 u* s" t1 a# g$ A3 w+ B, C // changes the heatbugs have made. The ordering here is
( A4 J2 t* B2 _7 M // significant! e- ?% N' H3 U
1 R% G5 i; H+ L9 r // Note also, that with the additional
0 c6 Y' j) e* x! b( g3 v% M) o // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ b; i# H' w; d* }$ q: w) G // randomize the order in which the bugs actually run
; g* h* C% t/ e) N* H8 H // their step rule. This has the effect of removing any, A6 \6 E) z8 w4 V, ?
// systematic bias in the iteration throught the heatbug
( T7 _, \' W/ U$ v$ P // list from timestep to timestep
- a' O) u# T: o! ~0 a' I* w( A , e& _' v1 N& k( L, I; g
// By default, all `createActionForEach' modelActions have
+ S0 i0 t* n! f // a default order of `Sequential', which means that the4 g k' ~2 P6 @6 q, j3 [& T
// order of iteration through the `heatbugList' will be
+ [2 A7 e/ q$ o/ k* E# y$ T // identical (assuming the list order is not changed) b/ T$ r. M/ U, d5 \8 ~
// indirectly by some other process).& Z% g4 ?( X! P9 e
3 ?* D7 H7 |0 L& ?
modelActions = new ActionGroupImpl (getZone ());* l. @; _: f; `) Y% b& S, H
# M, h: U4 T3 C4 L try {
7 a9 p9 d6 S9 C0 g8 X5 j* Y0 V! T modelActions.createActionTo$message* K# {0 R' f9 Y( C
(heat, new Selector (heat.getClass (), "stepRule", false));. M5 j9 G. ^$ e
} catch (Exception e) {! d. y5 K L* e$ v2 z' Y+ S
System.err.println ("Exception stepRule: " + e.getMessage ());
& L4 {4 B4 c+ A O" x3 M }
% @; n7 Y# K* ]
1 G& Y X! r! ]1 K( o try {
2 j: _* k+ ?3 u) d M! _ Heatbug proto = (Heatbug) heatbugList.get (0);
7 k; ?) _; _& H3 o& [4 m Selector sel = ; X0 Y6 v5 O R8 b
new Selector (proto.getClass (), "heatbugStep", false);5 N8 W4 {& e, ]6 V# A$ F8 @9 E8 W' s
actionForEach = r4 I8 ]5 l* l7 f3 E6 ~7 H; M
modelActions.createFActionForEachHomogeneous$call
V# {5 d0 e- r% ^" j (heatbugList,
1 a2 j- r# s9 H8 v8 J4 p% | new FCallImpl (this, proto, sel,6 ]4 M8 j# ]7 _, ?) d b$ k) w8 G+ G; B
new FArgumentsImpl (this, sel)));
" Z0 c$ Z' d# o5 a" Z+ ~' d } catch (Exception e) {6 @9 |( A* m/ h6 ~# N% l8 X, Q; `# j
e.printStackTrace (System.err);
4 M u0 U% [: o9 o }
6 B6 x$ g: L, C% u
5 }4 o; @) ?6 k syncUpdateOrder ();2 x0 d b. n2 p
0 Q$ j( d$ l: S6 B o. Z try {5 ~$ Q7 b( j' e. ?! S" m
modelActions.createActionTo$message ) s3 @ K/ x8 j: r3 B" L
(heat, new Selector (heat.getClass (), "updateLattice", false));" s2 @( x1 F! q' t a
} catch (Exception e) {
( `5 m0 C f1 D9 K+ y3 Y3 N System.err.println("Exception updateLattice: " + e.getMessage ());2 `! C |& I% \" l6 I
}
* D8 x. ^2 P7 v4 e+ l0 B3 ]
6 ^9 d0 p. M1 S& l6 Z1 A* W' d) B y) z, l // Then we create a schedule that executes the
@, g2 Z" c8 r) |% C6 z( ] // modelActions. modelActions is an ActionGroup, by itself it
2 @! {8 z) D1 Y // has no notion of time. In order to have it executed in G5 {' o4 k, k @8 U+ V
// time, we create a Schedule that says to use the
. H: T) S" d4 T* t! D- K" b" _( e // modelActions ActionGroup at particular times. This
: A$ u3 |2 T- B; \ E // schedule has a repeat interval of 1, it will loop every4 v3 K, P5 ?/ Y) b. q, Z/ Z! p
// time step. The action is executed at time 0 relative to, m9 O* H3 g1 a: w \7 V
// the beginning of the loop.
' \+ S+ ~, W/ n, O8 L# B: Z2 _8 U9 {% x7 B/ o) G
// This is a simple schedule, with only one action that is# k' d! S# C, b1 C
// just repeated every time. See jmousetrap for more
, C9 q+ N$ `- Y& N/ r% D! b9 y% O // complicated schedules.2 P* v6 }9 S+ a
4 \4 [: n3 m3 j) D4 y' b6 C modelSchedule = new ScheduleImpl (getZone (), 1);
( @% P# T# r* U" x, \* h modelSchedule.at$createAction (0, modelActions);4 Z6 F% t9 E0 ^/ a
/ a6 p4 h! S# P% s8 Z return this;0 @/ b9 R9 d. p- s8 ~9 k
} |