HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) q5 z7 P1 w- |( I2 ]
2 t2 S: ^# K& Z% d9 C' r public Object buildActions () {
& z# X3 P% k2 J- w, X; S$ W super.buildActions();# t- T: h% w) [
7 L! g- I' v" A, }. [0 K
// Create the list of simulation actions. We put these in
& c5 n+ F* B7 d, ? // an action group, because we want these actions to be
" _3 ?/ S) s0 D9 e: E; h( m3 \ // executed in a specific order, but these steps should3 K1 {- t7 U- o! I) W& ]
// take no (simulated) time. The M(foo) means "The message3 I, q$ r6 A2 I; e8 B7 }" ?
// called <foo>". You can send a message To a particular
/ D" i: V( B+ D* J9 p* ^' ^; y // object, or ForEach object in a collection.
, ?$ S: b, J" U, q
9 B7 \ K1 G) Z% X( ]' n // Note we update the heatspace in two phases: first run
! P! F. }; g9 T; W6 Z // diffusion, then run "updateWorld" to actually enact the9 @9 X2 T$ _0 n2 @& u5 a
// changes the heatbugs have made. The ordering here is8 l4 ~8 ^0 }6 X5 e% G
// significant!
, o6 N0 n# k' G0 k$ F; P" W5 l ' O3 C- g9 E2 \, m
// Note also, that with the additional9 |- G7 A Z! b7 W: U/ M
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& Y. U0 m/ V9 U. `& U // randomize the order in which the bugs actually run
- _% n8 u! h3 B: _' O // their step rule. This has the effect of removing any
& b+ m7 q8 C: v5 i/ {' b7 H // systematic bias in the iteration throught the heatbug# j& E% a3 X4 [% E/ ?# f- U- N
// list from timestep to timestep
8 M% C) x0 {$ y7 I- S: T# x
/ M1 p$ T* l6 r // By default, all `createActionForEach' modelActions have: a/ I1 ]& V0 |5 v3 r: T
// a default order of `Sequential', which means that the
) c5 j3 B q2 o: j) a // order of iteration through the `heatbugList' will be( @8 _9 D( q5 \6 B) @/ s
// identical (assuming the list order is not changed# L! {% U% {( {) |
// indirectly by some other process).4 D! y8 q8 Y& j3 L
- n; [* B6 V; @
modelActions = new ActionGroupImpl (getZone ());
! e# O4 B: m* w3 m: R+ K, Q1 [) [* y9 M& w2 T# b7 c h
try {2 _# {& |4 L. L
modelActions.createActionTo$message2 J% L6 p0 a/ D5 i
(heat, new Selector (heat.getClass (), "stepRule", false));
/ K" W* o4 \7 O' t$ J& l } catch (Exception e) {
0 ]: e4 b" [$ S9 \4 \ System.err.println ("Exception stepRule: " + e.getMessage ());; w$ Y# J# i6 y6 i
}7 x: ?$ T6 g2 J6 V8 |
' O5 h8 P3 u3 m* a+ R5 D9 K
try {- o/ F% T* d, [8 y- h2 {! U
Heatbug proto = (Heatbug) heatbugList.get (0);
6 S: |2 B# b7 ]3 A0 u) Q, l# I Selector sel =
5 p6 U0 |, K9 }# N3 D1 q new Selector (proto.getClass (), "heatbugStep", false);0 b h7 Y& u+ W: b- [; \
actionForEach =/ e' Z0 T% g3 h2 U* B
modelActions.createFActionForEachHomogeneous$call" ?3 g1 f4 L. f, }( n% g. w
(heatbugList,
0 z5 w/ V1 v+ A- {% I& U* F" i new FCallImpl (this, proto, sel,
5 Y& x5 f E- {* v9 M: j$ z new FArgumentsImpl (this, sel)));& L7 N/ b, l: Q1 F( z/ Q- g9 p
} catch (Exception e) {8 Q! ~9 x0 O8 ?5 n7 ~% ] U
e.printStackTrace (System.err);/ s5 A% ~( |- c @! w i
}. U$ {# @% H; g2 K \) [
& m- }: Q0 j3 I; ` {# Q syncUpdateOrder ();
$ y1 M2 S$ R. m ^( e
" P0 b* O2 a" }0 A, y try {6 J, q/ |( |0 [- I9 O+ C4 f1 M* t7 z
modelActions.createActionTo$message ' v8 s4 }- C6 Q: s2 C
(heat, new Selector (heat.getClass (), "updateLattice", false));! n9 _: N/ ?& e
} catch (Exception e) {' u; S D, q; \( m0 g: ] Q& N
System.err.println("Exception updateLattice: " + e.getMessage ());
7 z V& L& `7 ?" K* W: l! D }
' h! O7 L! }' W0 a # a! ]3 p* R1 H2 o( B+ u$ ]
// Then we create a schedule that executes the
. {4 U; {/ D) F$ E3 f% h // modelActions. modelActions is an ActionGroup, by itself it
8 p# P1 W6 d4 ^8 ^ // has no notion of time. In order to have it executed in
$ f' @7 L& o& C& s // time, we create a Schedule that says to use the
3 J9 E/ J6 P) K( ] // modelActions ActionGroup at particular times. This9 ?8 \' R+ m, y- Y( I
// schedule has a repeat interval of 1, it will loop every
$ j9 d: U% u* F- M R // time step. The action is executed at time 0 relative to0 T4 s- A; U1 o! c, U+ p! q
// the beginning of the loop.9 j# U. Y5 a+ G- M
, p6 _8 m1 L4 O: _5 R P& m // This is a simple schedule, with only one action that is8 F2 J/ b8 h) m8 N+ _
// just repeated every time. See jmousetrap for more4 j T# F! u" ^5 A6 |
// complicated schedules.0 v2 R! E2 h6 G! L% r ]% k# R
. I$ F, V" z7 E0 Z( |1 ^7 ~( \/ c modelSchedule = new ScheduleImpl (getZone (), 1);1 x6 W5 R* |2 V( C7 `
modelSchedule.at$createAction (0, modelActions);
! g6 D3 C& {# y2 ~ Y
; e; z* s% P A4 r- p return this;# G! C* A* Z0 f; k* [
} |