HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 q0 J j' ?: _4 j4 h+ E2 [- ?4 O% s9 K. ^4 y* U! s- B/ h3 S6 o, Y
public Object buildActions () {& i* u$ @6 p% l6 L. v. U- Z
super.buildActions();
5 T* H6 i) N$ u# r
! e% I7 m/ X5 R8 ^) V& `$ Q/ n // Create the list of simulation actions. We put these in
; g z3 j1 b" H( P+ \: ^% Q! C. \ // an action group, because we want these actions to be3 y" _- K U$ b4 _
// executed in a specific order, but these steps should
$ ^' g6 R& z6 m // take no (simulated) time. The M(foo) means "The message
% I5 A. J# X/ V# S w2 y5 R* B // called <foo>". You can send a message To a particular
" e4 o) O+ d2 L& R6 [' Z; a& H // object, or ForEach object in a collection.3 k6 D# K+ s- A! n1 y. E `9 v l7 u
+ `! e* P* J1 ]. M7 x // Note we update the heatspace in two phases: first run M: i8 ?, a+ C, s, _
// diffusion, then run "updateWorld" to actually enact the
3 T) f! q$ @! y: \; a7 }- m" s // changes the heatbugs have made. The ordering here is
' W' n% l! S- h0 S: j7 u2 Z+ V // significant!: x# r) f$ F. n) m, `
+ }+ n! J; L5 B& X1 _( B2 @7 w3 z- n8 B // Note also, that with the additional7 n3 {6 n& n" g/ t0 K/ m: L
// `randomizeHeatbugUpdateOrder' Boolean flag we can# |3 }4 d; T6 t% r( V7 X
// randomize the order in which the bugs actually run
' p* a- v5 g: K/ P // their step rule. This has the effect of removing any* j* z; ?7 l, _- j$ l- Y
// systematic bias in the iteration throught the heatbug( K$ P5 t3 u4 b5 M1 m
// list from timestep to timestep+ m! O( x" g9 t6 B: W" \( e
' c7 e) W# z5 I; @% V
// By default, all `createActionForEach' modelActions have. L, s0 B( x7 u9 l' N0 p3 Z
// a default order of `Sequential', which means that the8 [3 C9 d. `. H F% ]
// order of iteration through the `heatbugList' will be
0 v9 M) M: O( X8 B2 n' G% z- [( ^2 Q // identical (assuming the list order is not changed# {- Q- n% F& S! ]7 S! i
// indirectly by some other process).) T; G7 s" I" g: c3 L
( x5 _' y* `+ r8 K9 N modelActions = new ActionGroupImpl (getZone ());, k1 B2 W+ w4 }! a" h
! h2 q0 b' r* A& I, {$ @* v try {! }1 ^) O6 X$ H1 h
modelActions.createActionTo$message3 Q% M: X0 a" B& \3 @/ I7 k. n5 p
(heat, new Selector (heat.getClass (), "stepRule", false));
& J# J: K% b: ?; ?/ J } catch (Exception e) {& Z8 H5 u) M7 ?& N
System.err.println ("Exception stepRule: " + e.getMessage ());
2 o( U7 q$ f& R' I" O) c }
! f d1 p$ | C! D8 N
' L! @3 U& L3 D3 j try {
/ o) V" e7 @, s8 t; ?" J1 I Heatbug proto = (Heatbug) heatbugList.get (0);
t* C! u1 s8 s Selector sel =
: O' ~6 M1 o2 g) p% `/ Q/ n new Selector (proto.getClass (), "heatbugStep", false);
9 u: [6 H% v$ ^6 _) F5 s: d* k actionForEach =# J# e! n. [" M: v6 V$ |9 m* G
modelActions.createFActionForEachHomogeneous$call
3 D: G' W, {* }# a/ Y (heatbugList,+ M( n2 Q$ [3 D! B
new FCallImpl (this, proto, sel,$ O. ]+ X+ Y3 Z9 g
new FArgumentsImpl (this, sel)));
- C5 h7 h! k% b7 [3 d: [ } catch (Exception e) {# D: c- V' v' V3 N! V
e.printStackTrace (System.err);
' @: L7 l2 B3 A, m1 h* @ }
5 K! D) _0 }: E/ g
% A; R0 Q; |# H' ~; Q& e syncUpdateOrder ();2 m% B) ^8 O7 R, v8 z
* v0 ^3 [5 l9 {% d9 T try {7 E% ]) |8 `- c/ M
modelActions.createActionTo$message 1 Z* r( m; ^) d l" b6 }7 T" e
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 J/ J6 t( R( y, H, ~: ~( R } catch (Exception e) {& g& [3 q, ^, @6 q
System.err.println("Exception updateLattice: " + e.getMessage ());' X2 v8 X8 L7 ]$ A6 A) ?
}
/ K* _% | q3 ] C# q" j m: v( N# \! \; [' ?
// Then we create a schedule that executes the
2 ^8 c% K8 N2 W0 S // modelActions. modelActions is an ActionGroup, by itself it
$ w; J1 @/ R9 V3 H/ X // has no notion of time. In order to have it executed in/ F' Q8 Q8 G3 a3 @, B
// time, we create a Schedule that says to use the$ g" W$ ]/ v" r: m" K; z5 {# D
// modelActions ActionGroup at particular times. This p2 Y( \/ w; P0 V9 l% O4 q9 m4 s4 A
// schedule has a repeat interval of 1, it will loop every
3 h! d7 \2 C" o: B% a+ {4 Y+ Y // time step. The action is executed at time 0 relative to7 \! ]9 `9 k( I {5 N( d6 }: ]
// the beginning of the loop.' \! {* X: y/ i# U
5 n3 X0 a3 g& p! ~
// This is a simple schedule, with only one action that is. l3 @# P* B6 y7 h6 t4 r9 k) q
// just repeated every time. See jmousetrap for more# a/ [4 H) ] u: ~4 u4 k7 A7 l! @
// complicated schedules.
: I$ j2 h& [* E$ {" E9 ? ; [1 d# r* Y6 b6 R/ c R
modelSchedule = new ScheduleImpl (getZone (), 1);6 G0 _- J3 h5 a1 e+ y% r# x
modelSchedule.at$createAction (0, modelActions);
2 J% r7 ~2 K4 }' F3 }& P
7 ]7 E d9 p) g* @ r return this;4 g# Y) Q3 ?7 E& K. u7 ~
} |