HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 [5 p* S/ l% v J V
; F( _- X. g; {0 C4 u: @0 Y public Object buildActions () {% c5 ]' ?3 {8 n2 t
super.buildActions();
6 s; t4 u3 g+ u$ a. g( Z2 z6 i
% H2 ^+ J' m) X // Create the list of simulation actions. We put these in
6 c# L$ X: _# Z/ Y& }* B" P& I // an action group, because we want these actions to be& }. T( ?8 b$ ~
// executed in a specific order, but these steps should y( x# }: V% C A% K
// take no (simulated) time. The M(foo) means "The message
; C: q, n. C2 S# \. u: L // called <foo>". You can send a message To a particular- C# r; q0 A( x3 d! F/ H6 W* d
// object, or ForEach object in a collection.* A+ R% v" ~- |
5 s5 t( {0 J S. B8 V; { // Note we update the heatspace in two phases: first run
: L6 G" [8 B, e g6 ~# x4 i# ~ // diffusion, then run "updateWorld" to actually enact the! l! M/ Y% t' a5 p0 p# K
// changes the heatbugs have made. The ordering here is8 s1 G8 k. \/ t2 U2 D
// significant!
S9 x$ i" U; G6 D6 D8 B5 G' A/ o # l1 r, E$ e: H1 n, `: p% A
// Note also, that with the additional+ P' j) A3 K! C; w# X
// `randomizeHeatbugUpdateOrder' Boolean flag we can- r% }. y. n* E$ }/ k
// randomize the order in which the bugs actually run
- f9 o8 z: v n) f+ t; B // their step rule. This has the effect of removing any$ f* \6 X9 V, R4 B6 ?! ^
// systematic bias in the iteration throught the heatbug
) n+ v; w3 [- z( {; ? @ // list from timestep to timestep7 E; b6 c$ i6 `( U9 @
- u2 q2 t3 V, S4 m+ T0 j4 E // By default, all `createActionForEach' modelActions have; @/ b Q( f+ _) m D# s+ T1 z
// a default order of `Sequential', which means that the( q. j9 b1 z- T0 H) l# |+ X. R
// order of iteration through the `heatbugList' will be
* H) {0 n% _. G2 M* g: S // identical (assuming the list order is not changed" y B; G) y( N! p& ^8 h6 D5 R. g
// indirectly by some other process).- R5 Y8 |) {, i
7 D0 f' d7 B% _
modelActions = new ActionGroupImpl (getZone ());9 u2 Z( ~ Q( X/ [2 }
2 U% G. B& _1 Q l2 C. ~ try {0 b' Y b* l8 P8 w
modelActions.createActionTo$message
. D+ H! a7 ~! V4 y8 y8 Z (heat, new Selector (heat.getClass (), "stepRule", false));3 h- B' F0 {# d
} catch (Exception e) {
7 p# P* z$ X% B5 F2 f H System.err.println ("Exception stepRule: " + e.getMessage ());
9 i: L! `2 E& C* s6 @ }+ [ }3 v" X! v# J. Z2 ]. |
- ~) P9 w' t( ^. \ try {7 i: E+ K( C, n5 B: Y2 I
Heatbug proto = (Heatbug) heatbugList.get (0);
2 U, V2 b6 w) V) y3 t) P* M0 s Selector sel = * w5 |1 P) N# u/ G
new Selector (proto.getClass (), "heatbugStep", false);
. v% n: U" w4 z/ n) w actionForEach =" X" O7 c( C# B8 D0 b2 i1 S$ l
modelActions.createFActionForEachHomogeneous$call0 p% b ?" U' `( z/ H& G2 v* X
(heatbugList,
# s& l8 R9 w, u: t: b) L new FCallImpl (this, proto, sel,: x& V- x$ ]" _
new FArgumentsImpl (this, sel)));2 \. {3 f5 Z* ^+ S. ~8 G7 m8 M; v
} catch (Exception e) {: L8 r9 E% h6 w9 h4 t
e.printStackTrace (System.err);
2 i4 k+ X& W4 B* M% U }
; M1 j1 P" \8 {+ x+ f, u# S0 d & _6 n6 d) Z4 @4 j' i2 p
syncUpdateOrder ();, T9 {1 U% }. x. F8 x$ h j
/ D2 N" [+ s/ K6 h" c+ a. [
try { F, g1 M7 O1 L" J
modelActions.createActionTo$message
2 I! G! j: y% V( s3 L2 h (heat, new Selector (heat.getClass (), "updateLattice", false));
" W# j6 I. a. v } catch (Exception e) {
2 U" x' R4 X& p: Z% Y" e System.err.println("Exception updateLattice: " + e.getMessage ());
( h5 s' l, O# B }
' q" c/ q& ~3 K$ ^/ c4 a! a } 2 T5 e; r* {# O. p& L
// Then we create a schedule that executes the
# h7 k) v( V) s- r4 l, N! E // modelActions. modelActions is an ActionGroup, by itself it
. H. V) c0 D0 c# ^7 M1 d9 l7 F& Q2 h // has no notion of time. In order to have it executed in5 ?1 Q( g f3 q8 N" J! X
// time, we create a Schedule that says to use the
3 K6 X; d; S) s. B T: o) [/ W // modelActions ActionGroup at particular times. This
8 a- n/ H! C: V( J) G // schedule has a repeat interval of 1, it will loop every
7 \/ z' n+ E" K: u! d. M // time step. The action is executed at time 0 relative to
( {7 k9 t" B4 P3 y4 H% L // the beginning of the loop.
. q" {/ d, ~/ T' }# `
. i1 q4 j/ j8 f // This is a simple schedule, with only one action that is
% M3 |# e5 f7 H& h. ~% ?6 I' f8 w // just repeated every time. See jmousetrap for more
' J' i% }. Y& a: [0 h // complicated schedules.& U" m4 L2 @+ \. G! x9 S% Y
" @/ [% a8 C6 T0 E$ A
modelSchedule = new ScheduleImpl (getZone (), 1); l) a& G) l" o9 ^& E, G" S# T
modelSchedule.at$createAction (0, modelActions);7 E0 J& I9 B6 r" u, Q
6 p7 z c. s* g3 x; m; g) @ return this;
0 y5 h: I# L/ n$ {8 y+ f } |