HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ A! G. l3 M2 l$ e3 W& l
$ M3 w* f0 {. s' S public Object buildActions () {
9 v8 [8 I$ _& L+ ^ super.buildActions();
% A5 _/ B) S& k
# ^& u9 w$ Y$ u& M3 C% a2 b+ G // Create the list of simulation actions. We put these in9 `9 z4 U- C3 y8 k# J/ a! c
// an action group, because we want these actions to be7 J9 i: \! t& o+ u# X7 e
// executed in a specific order, but these steps should) N* h9 I M( u9 }% R( j0 E3 L6 y& i
// take no (simulated) time. The M(foo) means "The message+ e" ?9 Z% K7 m) i8 u0 F! R& r
// called <foo>". You can send a message To a particular0 J; c& b: t( R9 a I' H9 P
// object, or ForEach object in a collection.
' e& a9 p2 u# g9 ?) \7 O
+ T; ~1 X: j5 ~2 ?. t // Note we update the heatspace in two phases: first run. \4 j' a5 b# k q( w
// diffusion, then run "updateWorld" to actually enact the( K! E; @, d5 @0 P$ G- o+ s+ @
// changes the heatbugs have made. The ordering here is
7 H, p3 L' o9 x" o- Y; c // significant!( b y, N( K+ I$ P. }
1 J2 j- U! z! d- }! F B // Note also, that with the additional$ x# n* E( p& D' N/ z+ @' X
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, t# O* o! L+ n6 A0 ^ // randomize the order in which the bugs actually run
9 F/ C0 ?3 t# h // their step rule. This has the effect of removing any
5 e; {, T7 t7 a4 @/ a // systematic bias in the iteration throught the heatbug
0 f8 J8 U7 r% m8 r/ i( }' r // list from timestep to timestep
$ ^& Y1 v4 \9 d F& \$ f; V 1 V3 ]8 c2 `' _" ]: l- U
// By default, all `createActionForEach' modelActions have
1 q# D! g7 V* z* X- J x2 Y4 I- b // a default order of `Sequential', which means that the
8 N1 ^- P/ p+ j8 U2 }4 U7 O // order of iteration through the `heatbugList' will be, p' M5 W! o- p4 N
// identical (assuming the list order is not changed2 s8 }" u. R, s6 F6 w) j
// indirectly by some other process).; j9 U7 D( m3 r3 E( _8 |6 d' q5 }
v' ^* S! R X% W% o/ M: C modelActions = new ActionGroupImpl (getZone ());' U; q Z- ]4 a" e: U
s) Y" R( E: q9 n0 Z try {& C$ ^( J/ M: p2 ~. m, [
modelActions.createActionTo$message5 f2 S2 Z! ~! |3 L+ b
(heat, new Selector (heat.getClass (), "stepRule", false));
0 W+ o# |8 F% B) }7 R& e } catch (Exception e) {. F o/ Z" G0 ~% u2 ]+ z) p
System.err.println ("Exception stepRule: " + e.getMessage ());
0 Q! p$ j2 a/ C; n2 K' t/ F! t3 A }; V9 b' Y7 Y9 t- X- Y+ h, w5 h1 k
5 N/ p! g- H: J
try {) A7 K7 t q/ q% I4 Z6 p
Heatbug proto = (Heatbug) heatbugList.get (0);
% i% j' T& q! M6 w% e9 q Selector sel = 1 X$ t$ x8 z: u' I) \# R
new Selector (proto.getClass (), "heatbugStep", false);
( n+ U/ Z* a) ^( w4 [ @ actionForEach =
8 d8 L6 _4 \' Y2 ?4 ` modelActions.createFActionForEachHomogeneous$call
( M1 H/ F7 v8 ]3 w3 t# | (heatbugList,
$ B9 Q0 ?+ q( I new FCallImpl (this, proto, sel,
% w: j, X/ B; |/ v: t2 H) B& `/ X new FArgumentsImpl (this, sel)));
' I) _! b7 ?6 |, Q0 e } catch (Exception e) {
) f/ E2 l. @# E* b' S2 G& [( Z) x t e.printStackTrace (System.err);
% G( X) h8 J! x }
* ?# o) n8 \; y4 _$ n2 [* H
. O* {0 B$ n0 a' L syncUpdateOrder ();+ k& a/ g/ n& R+ {4 y$ [$ I: Q7 P5 I. C
+ Z7 t, j1 M' Y( N/ s. F* b
try {6 A- @( {) z6 D4 N0 T
modelActions.createActionTo$message
' p+ }4 u. c! d (heat, new Selector (heat.getClass (), "updateLattice", false));# F1 \1 ?/ A0 t( z7 t) Y1 ~
} catch (Exception e) {
8 G0 s- ?/ F5 w! p3 G/ w System.err.println("Exception updateLattice: " + e.getMessage ());
q& Z$ I0 G+ D }# P5 ^# d3 C- x. g; [
5 M+ _2 n# H# r: [6 V4 S
// Then we create a schedule that executes the
$ Z* ~2 w, i( l8 h+ H' T7 } // modelActions. modelActions is an ActionGroup, by itself it
$ a% [0 l( ]( M4 v$ b0 T // has no notion of time. In order to have it executed in
- `; J% \7 t. Q$ c/ u* G2 ` // time, we create a Schedule that says to use the
* {- h! c3 ~/ P. ^/ m% r$ M // modelActions ActionGroup at particular times. This z3 A8 U( f# l6 j/ F8 b) O
// schedule has a repeat interval of 1, it will loop every
4 J( l2 b4 ^! g7 G // time step. The action is executed at time 0 relative to
9 H q& t: C6 Q) y$ ? // the beginning of the loop.
K- j2 @. D. X( b' I1 I; P" j; u( b8 _$ X: \& ^/ w
// This is a simple schedule, with only one action that is
9 j) {! M" e4 F! b. j/ C5 F# q // just repeated every time. See jmousetrap for more, o: I+ x$ @$ X H. j9 H
// complicated schedules.# I5 c9 f9 u# Z* n8 Q
5 M, \8 A s6 x4 L7 E. ]: U modelSchedule = new ScheduleImpl (getZone (), 1);- u/ F0 K! {; P) o
modelSchedule.at$createAction (0, modelActions);
+ K. {" ?6 |' B/ {* \/ |
* l# ?% \; I4 X# K3 a- ~* i return this;
8 V% K" r& s% D( Q! l } |