HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 x8 P E; W- J i' H; R. ^
, `" Z6 A% a3 `* Y7 D8 I9 Z0 l
public Object buildActions () {# ]5 d& m& R- \/ o4 V& q) i
super.buildActions();* B8 j: T3 a; j) q# `
' b. @! N* E% P. R* j7 C% x
// Create the list of simulation actions. We put these in2 q1 e5 D7 O& a5 S4 g! p. M2 t
// an action group, because we want these actions to be% ]7 J+ X' @! S8 Y& T) z7 F
// executed in a specific order, but these steps should2 f4 }) ]8 s5 e, K/ p
// take no (simulated) time. The M(foo) means "The message
( H" ^$ r: ]% a! D // called <foo>". You can send a message To a particular
: W; G- U/ V2 x1 b& x6 s" u // object, or ForEach object in a collection.
: f% ?- x; [* O+ l" W! Y
7 R7 U3 `7 A& N- U% Z$ Q // Note we update the heatspace in two phases: first run& W) w" M f) X9 P0 b) y
// diffusion, then run "updateWorld" to actually enact the
+ I G8 _& Z# ~6 n+ o; w5 I1 b // changes the heatbugs have made. The ordering here is! C- U9 v0 p: ~/ y8 Z4 \+ b
// significant!3 i* F* M7 [* R9 P
( z) [4 ^, |( ?1 e# ?- V
// Note also, that with the additional
- Z5 T; E( L( s. i6 A0 a4 V7 [ // `randomizeHeatbugUpdateOrder' Boolean flag we can
' L6 j& t+ f9 @2 n3 P) C // randomize the order in which the bugs actually run# [6 g( M4 i, m9 b' S3 h6 r) D
// their step rule. This has the effect of removing any4 w0 r4 t0 v- ]. W8 h8 d5 M* b, E
// systematic bias in the iteration throught the heatbug V0 J6 [' ^, `4 c- U% r6 A. G
// list from timestep to timestep' j- ~$ @( v& b/ Z; @. p
2 z, R4 M F$ S) R! A/ q1 @
// By default, all `createActionForEach' modelActions have# N y) B' v: M/ c+ ~- n7 r/ t
// a default order of `Sequential', which means that the
; d8 O# {) M' h: m // order of iteration through the `heatbugList' will be
1 H" o# R; ~- B5 r: i0 ^( s# E // identical (assuming the list order is not changed: \ K2 W! U8 M3 U
// indirectly by some other process).
% k2 J* M8 y u4 x& L0 M9 x4 a3 s
+ q" i& j& S. v modelActions = new ActionGroupImpl (getZone ());
! I' @* a& e$ n' I! G3 V' C! |" ?
5 w8 u: @2 f$ m- Y try {" r& A: _" [: A' b! ]' V+ L# ]
modelActions.createActionTo$message- A" Y" Y# \3 d0 w1 z
(heat, new Selector (heat.getClass (), "stepRule", false));
) j! w7 |4 y1 y, a0 w0 f } catch (Exception e) {
7 F* u w3 i/ t6 j) Y% U( z System.err.println ("Exception stepRule: " + e.getMessage ());
2 ^( H, E0 d a U& Y- G5 i }: M8 h, T# {8 D. I
, N3 ?- @4 c$ Z0 |( `% w try {6 F/ W" Z3 J: a2 i/ d
Heatbug proto = (Heatbug) heatbugList.get (0);
; ~* ~! M& K9 K: t Selector sel = 3 P* \& n6 l0 M8 }& z8 T6 K( X/ s
new Selector (proto.getClass (), "heatbugStep", false);6 |6 r8 g( @+ W z- b$ L
actionForEach =& Z& \+ M% E, @7 E0 v* g S/ q
modelActions.createFActionForEachHomogeneous$call
4 j& k4 T) x' a5 ` (heatbugList,
) @$ f( z6 {$ {& t# p1 R1 v new FCallImpl (this, proto, sel,
; ]/ X' b# I% E& @ new FArgumentsImpl (this, sel)));. X: x# \ ?* @, D. i4 Z j, q
} catch (Exception e) {3 [9 O: ? a6 `9 T
e.printStackTrace (System.err);9 ^( ?+ N3 P b. {' \: z
}9 S6 r7 P6 K" s: Z7 k( v
& R6 c7 J& h; b) z' S1 w! E
syncUpdateOrder ();
$ C9 ]; I0 ~- \8 A7 c5 n! \4 J' M: _4 J
try {
4 }, a9 T) h, x/ T modelActions.createActionTo$message 4 d, `5 N1 Y; D' {, x4 }; x
(heat, new Selector (heat.getClass (), "updateLattice", false));; u) H% M/ l9 b" e2 S+ V( F
} catch (Exception e) {) B" A; g' L2 x" E
System.err.println("Exception updateLattice: " + e.getMessage ());
) C- l$ a2 b7 S }
# F O; p# z1 @2 c" N 2 I' f. w( S5 O0 r% U# _4 j; D
// Then we create a schedule that executes the0 X1 u2 a5 n' t4 {# c
// modelActions. modelActions is an ActionGroup, by itself it; n3 T9 K4 ^; \1 v Z
// has no notion of time. In order to have it executed in3 _; | I# Q& T; M6 J
// time, we create a Schedule that says to use the
1 A9 d i# m( q3 v5 N- s // modelActions ActionGroup at particular times. This
+ ?* h. ^1 D) J7 m9 C' f // schedule has a repeat interval of 1, it will loop every' N, Q# L7 x- P2 l5 u. z
// time step. The action is executed at time 0 relative to
+ r& B' X0 E+ v9 `. q6 ~ // the beginning of the loop.
, R0 k) t% P4 \! Q8 U! @! ~3 ]# `9 H& Z5 e
// This is a simple schedule, with only one action that is3 S4 E: W% j c' _( L
// just repeated every time. See jmousetrap for more
( q, e0 _: v; L // complicated schedules.
( x; \7 k0 A1 ~. V9 s' O % T: a8 t3 ~& O- d3 S
modelSchedule = new ScheduleImpl (getZone (), 1);, S L. [. P4 r6 U( N, p" S ?
modelSchedule.at$createAction (0, modelActions);
1 L) V2 O# h' t9 [- o2 R
' u+ W# g" v0 j$ W- |& T return this;1 [2 u4 O) _9 q
} |