HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% _/ H/ \) L. K; v" I* y8 ~
0 J( ?& v4 i+ y$ t' G V. O public Object buildActions () {8 N q+ S7 G. W% g) t- H4 d; I8 e
super.buildActions();
9 r; g! v, j1 k" w9 J 3 l! e) h% \9 n( f' }
// Create the list of simulation actions. We put these in& G; [" H1 v( P! n
// an action group, because we want these actions to be/ ^; ^0 H* T' E2 V
// executed in a specific order, but these steps should3 a- N# j( v% `2 O* d
// take no (simulated) time. The M(foo) means "The message% R6 F: N0 v7 r2 \, L0 Z
// called <foo>". You can send a message To a particular
7 r: v0 b5 z; u- p( U& E6 Z) O // object, or ForEach object in a collection.
: ]/ `5 y) Y+ q' u1 c, P C4 y
& f9 |0 p8 Q0 ?7 y* L% m' z h# P // Note we update the heatspace in two phases: first run
7 q! S; t7 N' K0 Z* @ // diffusion, then run "updateWorld" to actually enact the
9 y1 e" E% g1 W m( B // changes the heatbugs have made. The ordering here is) @2 q" Q7 L8 f y
// significant!6 S+ r# E7 a5 u
5 g! `& w; M; A \5 ?- U8 @
// Note also, that with the additional: Y0 A$ L& f3 I, b3 S
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 b' u- y6 @& m! Q- k
// randomize the order in which the bugs actually run' |7 W( R! u, Z: k# }7 I: ]1 b
// their step rule. This has the effect of removing any# n- E0 S. E' a6 p7 |5 V
// systematic bias in the iteration throught the heatbug
* A9 `/ \% O4 v: M6 ] h Q' g$ R // list from timestep to timestep y% t, f* ?7 N
' I _6 [0 a+ q F' a/ R8 n# y8 }
// By default, all `createActionForEach' modelActions have* r7 ]. t! J' C; Y+ r
// a default order of `Sequential', which means that the
+ i: v3 E4 y+ u8 z // order of iteration through the `heatbugList' will be+ Q+ N0 `& D& O6 h7 o" [% G5 Q: o
// identical (assuming the list order is not changed. G1 |- L4 p- Q* g( m
// indirectly by some other process).
5 B6 l. m' \7 W3 {/ Q" U1 R
0 Z9 ]4 S9 |- W. c modelActions = new ActionGroupImpl (getZone ());2 v* u" Z' z6 W- _9 n, x
$ G' A: ^; @/ B" N try {
# ^, n0 C9 {' F; D! {* T8 K* \5 | modelActions.createActionTo$message1 N$ P( \6 R1 [& H0 P9 J
(heat, new Selector (heat.getClass (), "stepRule", false));
2 d1 U: q% I" ^ N } catch (Exception e) {' |, D" R& u+ `# T) k( ^
System.err.println ("Exception stepRule: " + e.getMessage ());
! T0 t: c! Q/ ~. g }1 q9 X P$ K. }4 `
8 \9 b7 Y9 F# [9 a4 e try {
( j9 ]; p9 l# ?& f& f Heatbug proto = (Heatbug) heatbugList.get (0);
# O) U+ w) _$ g8 ?, ]3 a Selector sel = 9 Q* X5 Z$ `8 Z! e8 y
new Selector (proto.getClass (), "heatbugStep", false);; |" l8 N2 B( p$ s! t. C
actionForEach =
* q- s% Y/ t) T/ j2 q* P modelActions.createFActionForEachHomogeneous$call8 i1 G5 Z. k( m
(heatbugList,
; u# S: g( J' c2 P7 t2 g new FCallImpl (this, proto, sel,7 D8 h7 s4 O4 s4 m) B, F @- [
new FArgumentsImpl (this, sel)));
% d+ T" t. p4 p$ q3 T } catch (Exception e) {
$ g4 v+ p1 a2 p0 O( r" _4 P2 R e.printStackTrace (System.err);9 w8 P+ q' H& U. p/ r4 x2 }/ b
}
, i4 Z7 o1 Y+ C. H2 D( ?$ n9 o
$ Y6 N3 t9 P( K+ d% h& p& W S syncUpdateOrder ();+ s7 D/ s9 B( z. p( c
1 d f# K n6 Q9 I9 \
try {
5 r" m# r+ h: J5 j0 A0 B) \ modelActions.createActionTo$message
( C8 L8 {. S3 I' T% s" V (heat, new Selector (heat.getClass (), "updateLattice", false));
3 P) S7 g4 ?. R5 X/ |; ?" I } catch (Exception e) {, E0 }! r) t& {( o2 v
System.err.println("Exception updateLattice: " + e.getMessage ());
9 `) I8 ~2 D! h$ t* D- z }) Q; T& \( G& w# |1 v8 e
" ^* @; l( A% b1 @2 H7 T& x* y // Then we create a schedule that executes the
5 u* H% w2 ?2 [7 j5 Q% F6 u // modelActions. modelActions is an ActionGroup, by itself it
k r- ^; w5 ]+ s3 g // has no notion of time. In order to have it executed in. _0 k7 K- s* ?+ ^8 U% i' r; G
// time, we create a Schedule that says to use the3 Q/ F6 w2 `( g& [& s0 _! y* z
// modelActions ActionGroup at particular times. This4 P* u. c# S* i" f7 J. i
// schedule has a repeat interval of 1, it will loop every3 W+ _3 K# X- Q1 L. F9 K
// time step. The action is executed at time 0 relative to
, A% c5 z: i# M$ ?! [( i) V* B5 o. A- J // the beginning of the loop.# {$ `8 o- ^' {9 E7 o* k6 a
; t' G: L$ R r5 `; R
// This is a simple schedule, with only one action that is
& e: q; f. t" o' w9 \ // just repeated every time. See jmousetrap for more
9 m0 c; s% O! D4 l3 Z // complicated schedules.
|$ @: u3 g8 `% o6 g
( y. V s. L. O! X4 { modelSchedule = new ScheduleImpl (getZone (), 1);
6 u6 F% f( p6 u' K modelSchedule.at$createAction (0, modelActions);
: m2 i. l V/ F- Q0 B) f: i
8 q W6 l6 T; g% J, K8 L. [3 F return this; Z8 a. `( i# D* F: V4 J1 J, O
} |