HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' U' n% W, m' x H( Y2 ]
/ U t! w& N& P public Object buildActions () {
) n* n" t; x; r% Y' t8 y super.buildActions();
+ [$ Y% D% r/ U0 m) L, ~ 7 m5 t+ _6 _7 Y0 L' G' z
// Create the list of simulation actions. We put these in: Z3 d8 h ~0 k
// an action group, because we want these actions to be
# O/ \: l& j0 q* y& q8 j# ] // executed in a specific order, but these steps should9 y* Y/ l3 H1 D/ ?# D
// take no (simulated) time. The M(foo) means "The message
- Y7 Y9 b: [' w a( O' s! o* I // called <foo>". You can send a message To a particular/ M; e+ \6 I0 |) h
// object, or ForEach object in a collection.
) r# h2 j, j5 N) A p: x! D
' c) A' o Q2 a; D J // Note we update the heatspace in two phases: first run ^0 ], {) V8 ?$ P
// diffusion, then run "updateWorld" to actually enact the% p) W8 W8 P' l8 q7 q) R% @
// changes the heatbugs have made. The ordering here is- K; ^6 U7 u/ r' b, [
// significant!
" U7 X* |' A% c4 a8 {1 j$ x G( |; `
! _6 Y& `( r9 i# u. f/ n* o3 ~' p // Note also, that with the additional
; @) f( V* Q+ r# E! ~: Q // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ X$ {: {2 `# V7 E! j // randomize the order in which the bugs actually run
2 Q1 i/ \# q% y, E {, Y; Z // their step rule. This has the effect of removing any
. C, t' S t' l Y# \' b // systematic bias in the iteration throught the heatbug
2 e: c# G" M1 Y0 v/ q$ ^; n // list from timestep to timestep- B- n* c) E, p( y& k
' v- a$ c- ~ ~$ m' c // By default, all `createActionForEach' modelActions have
# l( N! j ~5 W4 y; c/ Q+ B+ `/ E // a default order of `Sequential', which means that the
! K+ O. a1 i0 w8 e+ `- J/ t& ?6 y // order of iteration through the `heatbugList' will be
3 [0 C$ J9 d @7 z; Q // identical (assuming the list order is not changed: T6 n1 P' x' I4 w& K
// indirectly by some other process).# j7 i8 J/ q- L; ~+ f3 o X
( h _: e0 A4 s2 p% K modelActions = new ActionGroupImpl (getZone ());6 Z% H; V- Q" R) @
% Z, W. b4 S4 F- H8 h. G try {* m; t: S0 V C: [
modelActions.createActionTo$message8 w4 ?3 y/ I0 E/ @ s
(heat, new Selector (heat.getClass (), "stepRule", false));
6 b' l. j8 _, w/ L+ D p7 x } catch (Exception e) {3 {" v1 ~+ n' A6 o' V N8 T6 A; Z
System.err.println ("Exception stepRule: " + e.getMessage ());
( ?* B$ \; v/ F% M S- N }0 W' E4 o y$ w. S9 ~! ]( n
- D0 P; h4 o( n- C7 r% k; A) ^ try {1 _+ t( c+ X; z7 \
Heatbug proto = (Heatbug) heatbugList.get (0);
4 Z! @, Q* _6 `$ F6 Y* m0 d* E Selector sel =
' O. m _! ~, @ new Selector (proto.getClass (), "heatbugStep", false);
: F* u K: I9 M9 Y" `% }- c actionForEach =' B* w6 t/ y$ F
modelActions.createFActionForEachHomogeneous$call
@# z9 R- P/ ~0 M4 x! x y9 R* q (heatbugList,: R) ~# {3 i9 l% I. ?0 m
new FCallImpl (this, proto, sel,
, w$ [ ~) b4 P new FArgumentsImpl (this, sel)));" T' M& o8 l. b9 o+ m
} catch (Exception e) {& x8 s& m& u9 F! {* M" C( S
e.printStackTrace (System.err);
* [, O$ G9 g! }. Q8 S. p- \2 U }
" R# Q5 U# @3 Q2 _8 G0 Q4 v1 ?
$ ]9 y- j* L+ ~$ n3 |$ W syncUpdateOrder ();
5 P+ N, t" v# {: Z6 E
+ @9 f& i/ f5 p% T6 v try {
( y. `. |+ [3 z, M1 w/ ?: N+ U modelActions.createActionTo$message 8 u0 o+ f- k: t/ W% M
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 x6 ]& Z+ f& S T B: H7 g7 v } catch (Exception e) {+ E$ z( `9 k/ `$ K
System.err.println("Exception updateLattice: " + e.getMessage ());$ y1 C6 x, y; e' I: _3 v
}
( t8 n1 `9 m" T$ c" A6 ^: M( e ' t& @ A7 Z g) m
// Then we create a schedule that executes the
4 v2 Y. V; L& K6 M, C' r // modelActions. modelActions is an ActionGroup, by itself it
2 c! K9 H4 q$ ^8 |# } // has no notion of time. In order to have it executed in
h3 v& d: A) x, f0 } // time, we create a Schedule that says to use the, i1 z; d7 `* C* ]( J
// modelActions ActionGroup at particular times. This) T, _* B0 F0 T7 g1 M8 ?
// schedule has a repeat interval of 1, it will loop every
4 {; Q& T& O: u6 v2 f' u+ U // time step. The action is executed at time 0 relative to0 G5 b$ c0 P$ w- e0 q e0 j- P3 m
// the beginning of the loop.
0 z( ?( ~" M6 p3 o. S" x0 U/ C# p* T2 x* O q! }
// This is a simple schedule, with only one action that is R6 D; J, Z; U) S. J
// just repeated every time. See jmousetrap for more
; x+ S6 c0 h h // complicated schedules.% h# c! `. J, {9 Q* O
. t1 @: Q2 |7 d2 R) [9 @; P modelSchedule = new ScheduleImpl (getZone (), 1);( C& N- W# ]- ^3 A3 R d* ~
modelSchedule.at$createAction (0, modelActions);: k% B0 c$ y5 `4 u; k4 S0 L
1 e; y" {+ P% T S% k8 V return this;
1 m& _5 e) `0 \: \ } |