HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 S& C# h0 D; }% G; F7 d* ]
8 p7 d* y$ P r6 S9 o
public Object buildActions () {
; N! h8 n4 C8 M b! k* l# G7 l super.buildActions();2 w0 n& _( g' G) h% Q0 ?
( o4 ~4 z7 }5 [+ k+ R6 Q // Create the list of simulation actions. We put these in( Q, y! o4 W C3 X5 Y5 b
// an action group, because we want these actions to be2 N- p2 g! e, W3 x
// executed in a specific order, but these steps should) T7 Q( x# O( N- |) X0 g/ x5 d
// take no (simulated) time. The M(foo) means "The message: X& i: |. Z( X' }3 p- q+ w
// called <foo>". You can send a message To a particular
7 g% H# ^9 v7 p& q // object, or ForEach object in a collection.0 a' @6 }. ?4 D6 K' W2 V
' M+ J( A9 p- B& d, Q+ ~1 j // Note we update the heatspace in two phases: first run( X% Y; F, R" `
// diffusion, then run "updateWorld" to actually enact the' [: c' z! H0 T2 y1 H
// changes the heatbugs have made. The ordering here is
6 K9 f* G' P6 a# y // significant!- K* n! ]6 k* B8 i
: S/ r: J2 T6 u e5 `& a; T // Note also, that with the additional
1 ]" a# r; P$ e) V+ c# i // `randomizeHeatbugUpdateOrder' Boolean flag we can
: i& X. n1 J k0 n // randomize the order in which the bugs actually run. P. z, \0 ^) g( x- v
// their step rule. This has the effect of removing any
+ K( T/ r' [3 R+ S6 l" d4 \+ b // systematic bias in the iteration throught the heatbug1 x3 r# P2 p. T1 x0 M
// list from timestep to timestep1 Y' d- v1 W7 w. l) [- @$ P7 s
& K; Z3 k4 s5 A: A Z; }4 U
// By default, all `createActionForEach' modelActions have2 f; W+ g' C5 I
// a default order of `Sequential', which means that the) U3 r D' B! ^, _. T: s1 _
// order of iteration through the `heatbugList' will be
~3 J) m) N& X3 F2 G* b4 z* V // identical (assuming the list order is not changed
, ]7 k5 P. h2 k* k! f! Q0 X // indirectly by some other process).
2 b- X' \, A) f- I8 k! u. J# K+ [
! I. u# J) ~+ v: y. `! g/ L modelActions = new ActionGroupImpl (getZone ());
$ u5 o D: G9 k; Y/ B) n7 \) v0 j' f& ]8 b. y& i/ b$ @
try {
7 K4 G& k% r( j6 d0 n+ e# R! f modelActions.createActionTo$message
7 Q/ x0 j& f1 f2 c- ^# A (heat, new Selector (heat.getClass (), "stepRule", false));
4 c6 S- n( w, t8 L3 k } catch (Exception e) {' b$ w. t# N9 f
System.err.println ("Exception stepRule: " + e.getMessage ());
; H7 T+ k: E( i }
8 X' [% m T4 c1 a+ {' d7 [: R
6 A l1 k: o% s- p+ ?7 k$ k" w" p try {
; h3 E2 B- L9 { Heatbug proto = (Heatbug) heatbugList.get (0);0 O2 J0 L' N; n, D1 \$ h( T0 u C2 y
Selector sel = 5 A$ x$ O- y* I3 [3 t
new Selector (proto.getClass (), "heatbugStep", false);) B) |8 w( c! n5 F
actionForEach =
9 O6 q: D) _ N" T; j0 q modelActions.createFActionForEachHomogeneous$call
( {: U6 f7 u" s9 F/ U8 e3 F/ l! s (heatbugList,; X3 |$ p: i3 F/ D+ ]. x7 ]
new FCallImpl (this, proto, sel,8 }% U: e! Q0 O* E6 {3 n' A$ Y
new FArgumentsImpl (this, sel)));* `4 Y/ ~ S0 A& ?
} catch (Exception e) {
9 n S( S$ W' j0 B e.printStackTrace (System.err);
, b' x' {' m: s1 v8 W; O8 V }" @$ Y. p" E1 s& @) u
( t5 i( b8 S7 i3 o( ~ syncUpdateOrder ();) Z2 o, b/ r$ i' F. ~
: I5 C! L1 z' b3 Q: P% ]9 H& l try {$ l" ~6 d$ l+ H$ V* n
modelActions.createActionTo$message
, @5 x" G; L" {( `2 L (heat, new Selector (heat.getClass (), "updateLattice", false));0 o) M3 @! u. m3 }% ?
} catch (Exception e) {- L! L1 h/ f/ I+ g4 a
System.err.println("Exception updateLattice: " + e.getMessage ());1 Q( x3 Y2 X5 J
} {' ] `% d/ j5 n! j" p' T9 D
# w. z C8 @& \$ @9 ^, v; q- ?4 k
// Then we create a schedule that executes the7 q; J8 w* w) k9 N" B& {- J' n
// modelActions. modelActions is an ActionGroup, by itself it
i3 B; E5 x, N" Y // has no notion of time. In order to have it executed in3 R. Q/ i1 Q6 T$ Y; c
// time, we create a Schedule that says to use the7 w8 N# p2 F$ _$ F9 }5 G
// modelActions ActionGroup at particular times. This
2 b% q, Z; T) l2 W" {6 a# h // schedule has a repeat interval of 1, it will loop every' A/ s& n1 V' B" @
// time step. The action is executed at time 0 relative to: I7 U2 l$ ]. L, o4 g
// the beginning of the loop./ H. R/ x; V" @: q$ Q1 V( D
" G6 \+ Z8 w# x8 J# B. l3 g
// This is a simple schedule, with only one action that is
2 V: |; Q# s' a g( p. i. [/ y // just repeated every time. See jmousetrap for more
! r* n5 M0 E6 [6 k( X // complicated schedules.( S: m3 @) z* _- N" U
5 X j& m( l2 {- q6 P$ j modelSchedule = new ScheduleImpl (getZone (), 1);# d# |5 N6 i. l5 \
modelSchedule.at$createAction (0, modelActions);1 ?+ l6 Y( ^2 Q5 n+ x- c% p
, R4 V. d' W1 ]( |/ B2 l2 \1 }
return this;
: Y y7 h8 p6 d/ Z/ W& c } |