HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' c! ?; _2 D B, l; g n; A0 s- R
1 j) d9 `" U. F& A( ]; K
public Object buildActions () {$ c5 j3 {# S! W4 A* b- V& a/ Q- o: p
super.buildActions();4 a, J! g8 S2 @- D9 ~/ x
9 k! x; d, z5 S- Z- C/ u // Create the list of simulation actions. We put these in3 p q7 @4 `# |$ T. }4 F+ C: g& A+ z* [
// an action group, because we want these actions to be
2 S6 B! d; t8 p7 d/ X // executed in a specific order, but these steps should
3 G; O% X9 s+ q$ R1 b$ v // take no (simulated) time. The M(foo) means "The message
# i, z8 B4 `6 ~: m! _( r // called <foo>". You can send a message To a particular
" _' w3 H0 {5 @+ ^" w( n9 G7 n, K" }8 W& t // object, or ForEach object in a collection.
: P( Z: h. F3 s% Q# R
6 V" c9 O' p5 X' w // Note we update the heatspace in two phases: first run
( W2 R8 }0 b4 \+ V // diffusion, then run "updateWorld" to actually enact the. P6 \5 v& q& \; M! V2 t
// changes the heatbugs have made. The ordering here is
+ W, g( I. v: L // significant!
' Z: d% c4 x- A$ B " X! Z/ }1 y/ _! T; a" w
// Note also, that with the additional( A, E1 \# X$ T% M, L" X, l
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 M5 k, f' w$ T/ l3 M6 n) ~/ b: v // randomize the order in which the bugs actually run
/ A" T% |# L& }* r$ k {$ n0 C // their step rule. This has the effect of removing any
7 Z" f. p% d' d/ V // systematic bias in the iteration throught the heatbug0 ~; @7 A+ X6 T" A
// list from timestep to timestep
) v9 R9 S1 S. j: n" I& u$ @ % K, D9 }) I8 B/ K' k! Q' x. K. v3 G6 e
// By default, all `createActionForEach' modelActions have" f& R: t& Z" ^3 C, z
// a default order of `Sequential', which means that the
0 l7 b8 ?0 z7 l8 I7 b$ s' r // order of iteration through the `heatbugList' will be
5 p8 @( t' o3 w // identical (assuming the list order is not changed0 q4 r W: X h% T
// indirectly by some other process).
5 P. R, {+ V% z# g- f. W . H6 ]. y6 R3 R* y/ j. x8 f9 J0 Y
modelActions = new ActionGroupImpl (getZone ());
/ N( a f; [, o, D8 ^0 ?6 }/ f5 L) g% }. w) ?) p
try { _& h; _$ w8 F9 i
modelActions.createActionTo$message
) s3 \% Y& k% V g& F (heat, new Selector (heat.getClass (), "stepRule", false));% A; s) R# J( ~& C
} catch (Exception e) {3 O7 s* F$ g4 s4 L
System.err.println ("Exception stepRule: " + e.getMessage ());* H+ K8 C! b! l$ u. B2 p1 t
}
& Z# Y; V% S. c, O
: O( ~; q! l U0 O6 ` try {: T: V: C" _) o
Heatbug proto = (Heatbug) heatbugList.get (0);3 b% k- y" f9 Z' [0 E w$ |
Selector sel = + A% t# N9 P! F0 a
new Selector (proto.getClass (), "heatbugStep", false);
+ S. w) [6 Y e9 k( L actionForEach =
6 B* |* U1 c0 P1 i4 D- b, T4 P- m modelActions.createFActionForEachHomogeneous$call
( v# R c0 f% `! [% o( |5 I (heatbugList,
+ h8 |" K7 ~: D8 { new FCallImpl (this, proto, sel,
4 g. ]( T9 ^* L new FArgumentsImpl (this, sel)));6 E% p3 x* s8 g8 P
} catch (Exception e) {
6 Q A8 o h- m9 a v e.printStackTrace (System.err);5 F/ ^4 l6 [8 {4 X( Y( K
}
# K) s' }1 J# T6 K, T
8 r) @$ N* E4 k1 A l, K syncUpdateOrder ();
% q8 g$ @: x: K0 }7 `8 o( i" ^( b/ R8 O3 L) e9 D2 i
try {
. K, `8 |- n7 A1 V5 g" | modelActions.createActionTo$message
2 J* c# a& p; w+ s2 m" N (heat, new Selector (heat.getClass (), "updateLattice", false));
4 o; o1 G2 e" B0 v1 y1 R; v/ h } catch (Exception e) {6 l# j, s% W* ^" @( i0 `* ?* G# j
System.err.println("Exception updateLattice: " + e.getMessage ());
" ^" ?* ~. f/ E; U }" P4 }' ^* C! U+ L4 i
; @1 U% Z: Z& ?/ I7 e- x7 j
// Then we create a schedule that executes the
# ?: z7 e: F2 H( i5 S) `9 Z // modelActions. modelActions is an ActionGroup, by itself it: O9 U# q2 a& h
// has no notion of time. In order to have it executed in: z0 Z6 A3 S9 `2 w/ {8 {2 x8 e7 f
// time, we create a Schedule that says to use the6 y0 Z) O: V$ X1 Q$ y+ j
// modelActions ActionGroup at particular times. This
9 Y: i! J9 t* {3 I // schedule has a repeat interval of 1, it will loop every, l4 f; u5 q) ~, d5 G
// time step. The action is executed at time 0 relative to/ U8 u3 V D$ u( d5 G/ N; N& r
// the beginning of the loop.; `' v* v$ d' p% a# u% E6 J
( B; a2 z3 l$ i9 h3 l' M5 P // This is a simple schedule, with only one action that is
' O& \, X$ B$ y6 Y9 _+ } // just repeated every time. See jmousetrap for more" ~% v, ]8 Q* t" a5 N
// complicated schedules.
. B% f+ Z6 Q" d1 J, Y# v! x 4 w: v- S# W& x* E/ o+ E
modelSchedule = new ScheduleImpl (getZone (), 1);
, d# P% Y/ P" f5 i, v modelSchedule.at$createAction (0, modelActions);
1 ]+ i5 `) Q5 H, }$ U! F " N% D- g* k/ M8 W" R
return this;. N5 l9 i* V s# Q' U J7 R
} |