HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. b4 X6 e! F! S4 S0 I. [5 Y$ M1 s7 [0 g; w3 m
public Object buildActions () {
2 Q+ j8 v' t* i1 Z: z super.buildActions();
) J( A% s8 j0 D9 b0 z" n- x B
. [, t& p" }2 @0 R4 f9 {! p1 K // Create the list of simulation actions. We put these in
' a" g3 W) [- n5 f) k // an action group, because we want these actions to be
$ C; q( S: j9 n0 j6 e( M# z // executed in a specific order, but these steps should
; d! l1 r1 S4 p8 x2 V // take no (simulated) time. The M(foo) means "The message
$ I- Y. C* k+ f6 @- }! | // called <foo>". You can send a message To a particular( {9 B1 g" z$ x- I0 }8 h
// object, or ForEach object in a collection.
! ^6 N/ A/ l9 ~9 b+ e; W
7 d$ J3 ?' ?7 u4 E3 a // Note we update the heatspace in two phases: first run
# j: e( t; o" X' O3 M: m. d // diffusion, then run "updateWorld" to actually enact the+ x4 |5 X6 M* Y M* O: D, G
// changes the heatbugs have made. The ordering here is1 d* _( b& |, i/ a0 b
// significant!
1 p: T- G6 p4 O/ D+ _ w' h
2 d" l8 ?5 b) Q // Note also, that with the additional* Z6 e, l, I9 t; \
// `randomizeHeatbugUpdateOrder' Boolean flag we can- ?6 }5 h" V4 l* ~8 m/ x
// randomize the order in which the bugs actually run
; b2 E" A: W3 H9 ~$ t% b* H // their step rule. This has the effect of removing any
- Y: i; E) j* z9 }, n' I* O // systematic bias in the iteration throught the heatbug
% z( e' o; f% b7 \2 U+ b% x% @ // list from timestep to timestep
5 w# p4 G0 q2 Z( Y+ I9 Q M) ?% w1 y+ Q% U8 N/ G
// By default, all `createActionForEach' modelActions have
: y$ b: U. z ?- e6 j // a default order of `Sequential', which means that the
$ @& }/ A' l! n2 H // order of iteration through the `heatbugList' will be' k1 M0 U# @5 P6 s% U+ O
// identical (assuming the list order is not changed
/ T4 o j* k. u" ^, h& u // indirectly by some other process).7 `" [, A: ?. G" @7 C% s7 z
1 Y" N/ W$ O+ E3 H2 g. ~
modelActions = new ActionGroupImpl (getZone ());% S/ n& d7 J# e3 ~( q
* @7 b E7 F6 ~3 v+ | try {
0 z' r. }5 `& B modelActions.createActionTo$message
I5 }/ {" _% M& G+ q' x (heat, new Selector (heat.getClass (), "stepRule", false));
$ w3 A( a! x7 X z7 W } catch (Exception e) {5 u. G; g& V8 u/ ?: `) s3 X
System.err.println ("Exception stepRule: " + e.getMessage ());
6 p A5 T3 E6 p5 {: ` }
6 j! {4 X& w( o* g8 S/ K- g# B
% ? Y- X9 w/ Z try {$ k3 t0 m( `$ K+ }4 n
Heatbug proto = (Heatbug) heatbugList.get (0);
9 D' u! E. Q$ K/ G4 y) o Selector sel = - H) G2 A: w. |
new Selector (proto.getClass (), "heatbugStep", false);; u- x$ K+ S& I9 c( ?" u( @
actionForEach =
; V9 c7 L: K5 z* V modelActions.createFActionForEachHomogeneous$call3 p4 W% f" h/ s/ |0 W! ?) ?3 C
(heatbugList,
( E; p+ z: n- O( B/ c% Z0 A! I new FCallImpl (this, proto, sel,' K; \0 w* _" U, @& q3 [
new FArgumentsImpl (this, sel)));
& b4 o1 w" [2 H } catch (Exception e) {
9 y7 T" v6 m/ u) J" O1 [1 L; c- S/ @ e.printStackTrace (System.err);
2 \: B. S) t0 x: N4 m9 H; B: M }' Q0 W) b4 }: h" H
- y0 C9 z7 L& k
syncUpdateOrder ();
% S6 _2 n3 d7 A- m; ^5 Q' R2 C3 p) ~3 b- P
try {
; T1 r9 ^! W4 Z* t modelActions.createActionTo$message 3 C+ O1 n0 M { u5 Z
(heat, new Selector (heat.getClass (), "updateLattice", false));
& j! J# i9 u, c& U0 n% b3 f } catch (Exception e) {
; | o' g9 a9 }* R' D5 l System.err.println("Exception updateLattice: " + e.getMessage ());6 Y& g+ H( ?1 g; P& M) P1 M Y
}/ F# j. r) l1 P/ y- C6 C8 P. u p
+ l0 A/ P$ a; }( o, x
// Then we create a schedule that executes the
; c' ~, n* q! j; y // modelActions. modelActions is an ActionGroup, by itself it
4 |- }3 }( E. R- v // has no notion of time. In order to have it executed in
# q# v Q; l. @* T // time, we create a Schedule that says to use the
8 |$ e1 x! U, R1 O( t+ K // modelActions ActionGroup at particular times. This, R. \( o, f: E5 w2 _ d
// schedule has a repeat interval of 1, it will loop every* ?' F" \* F# e5 P
// time step. The action is executed at time 0 relative to& Q4 J5 `- h7 |# k8 A
// the beginning of the loop.
9 y5 K- g6 }/ I0 |
) s2 J& K+ C$ L# D2 c // This is a simple schedule, with only one action that is
# ?0 C8 q7 K* @, z7 Y4 V G // just repeated every time. See jmousetrap for more& ~ m* {; d7 p, t m% x- u6 J
// complicated schedules.
6 m* E" y4 ?# R4 s3 \; Y0 n , u, R; m4 v; n8 b
modelSchedule = new ScheduleImpl (getZone (), 1);8 l) n. }* B5 D5 w2 I S
modelSchedule.at$createAction (0, modelActions);& V" O! X( \" M. X
# U0 U( n0 t# l8 z! L- y- r$ a; M( s
return this;$ x. m% I/ E( E2 A2 q- }& R& m
} |