HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: o( J; I+ N% B% B1 N9 W; t+ ], Z
; N. C& x# g B6 ~4 @$ M public Object buildActions () {
' c1 q: a3 {) E R super.buildActions();3 ?! H K3 c2 }! ^
" ^- i; f5 C, F! W // Create the list of simulation actions. We put these in( C6 j1 b9 K' Q( k
// an action group, because we want these actions to be9 O% {. x9 H7 o! A; o: m
// executed in a specific order, but these steps should
' h- _1 c, [/ b8 g4 q7 q // take no (simulated) time. The M(foo) means "The message4 P- r2 X; g3 r
// called <foo>". You can send a message To a particular% a, c* d( p9 D& P! h
// object, or ForEach object in a collection.
$ J# w* r1 R9 Z' M0 L: i
2 U5 B/ y2 X7 L: O8 @; X // Note we update the heatspace in two phases: first run; [% T4 y+ f' a6 g" p! s6 }0 J
// diffusion, then run "updateWorld" to actually enact the; @& r* s5 p7 i, M. V
// changes the heatbugs have made. The ordering here is: o; y! o1 T' i i. W( t
// significant!
6 o m. d, t/ k 1 c8 @8 W6 v1 D. Q* a
// Note also, that with the additional- H, | i% \- w
// `randomizeHeatbugUpdateOrder' Boolean flag we can
$ ^' Q* ]1 Y( X% k8 U4 c // randomize the order in which the bugs actually run" f4 y( r2 a7 O7 _. r$ |
// their step rule. This has the effect of removing any
/ \" N5 v. R9 r7 Y' c0 x; A$ D // systematic bias in the iteration throught the heatbug
5 K1 [6 e. \9 h2 i4 t8 b7 [ // list from timestep to timestep! @, I6 q' _. o- d3 x3 T; x
: H ?5 ?: e8 P# D, D- z' z3 O
// By default, all `createActionForEach' modelActions have0 u9 n I: w! E
// a default order of `Sequential', which means that the
" y/ u& I$ `9 l% P) r' h8 u // order of iteration through the `heatbugList' will be) o! t' F w! H# s
// identical (assuming the list order is not changed
0 i8 K& z4 ^- z# n& c // indirectly by some other process).7 O/ R, R U; A/ }2 `
4 q! u' q% J6 I, j
modelActions = new ActionGroupImpl (getZone ());
+ Q/ T# R% P0 a7 L# f' V
( K7 @3 \$ |4 p# ?. a' g) Q& e q try {
( a0 z( N- e# ]: ? modelActions.createActionTo$message
7 H2 ?; z# q6 b u( f (heat, new Selector (heat.getClass (), "stepRule", false));
* H8 J/ n* T1 u- s; ? } catch (Exception e) {
% j9 x( O6 c& e' E# s/ G$ b System.err.println ("Exception stepRule: " + e.getMessage ());
: F2 i/ X8 H4 }6 V, T! I }/ o4 R( C' r: O/ }6 M5 d' _
& g2 e: V. n" X6 Y. i; `
try {. |( k* w9 p* q9 Z0 t. R
Heatbug proto = (Heatbug) heatbugList.get (0);7 ]' i, a/ ]5 ?) Z
Selector sel = " r1 W8 ^0 ~0 W& L% b8 k* h! }
new Selector (proto.getClass (), "heatbugStep", false);( o. W& P! ^4 p2 B9 [9 @
actionForEach =
e! L2 W! g" C modelActions.createFActionForEachHomogeneous$call
7 h4 O$ r$ M9 u0 P ~, d/ D9 R (heatbugList,. ]- v* K3 x7 ?, X' _: |6 _: W
new FCallImpl (this, proto, sel,
/ P- }& s5 ^5 H5 [* b( M+ K- G new FArgumentsImpl (this, sel)));
. Y) z0 }, B( M. }9 V) B# T8 R% ~ } catch (Exception e) {8 y7 B0 ?* v- [ {
e.printStackTrace (System.err);
) k# B( U2 |) z+ y5 e8 j }
6 f" M4 Q' l9 K) d" M# U 5 T/ c7 }2 t0 B4 v q
syncUpdateOrder ();
& u9 o7 h( r/ |7 r D# ]9 V# v- U. h8 c: w5 T' w
try {
0 Z7 P: J, D4 l& e modelActions.createActionTo$message A8 i l- [0 K0 U; h
(heat, new Selector (heat.getClass (), "updateLattice", false));! M; P; J8 ]) @7 d, o& p4 D
} catch (Exception e) {
* y9 `5 a, H, d# z/ n/ k: A9 h6 C System.err.println("Exception updateLattice: " + e.getMessage ());
5 ]$ ?$ D$ S9 j8 ~) t }2 N) B* ~) M9 Q! k) i9 }0 \' p
% L# l5 ^) v4 \! C( A" T* o2 O/ H // Then we create a schedule that executes the a1 I' j' }4 e* W( Z( u
// modelActions. modelActions is an ActionGroup, by itself it1 X* @+ g" \7 J) {/ Q: T' ^
// has no notion of time. In order to have it executed in* g) d' q$ n" A% V8 v9 y+ H
// time, we create a Schedule that says to use the* x5 _: F, P7 h y; i" F1 E8 Q2 ?
// modelActions ActionGroup at particular times. This
) `9 `6 d9 r! X# Z" p // schedule has a repeat interval of 1, it will loop every
+ Y/ D$ E0 V! `- x // time step. The action is executed at time 0 relative to: H( E F2 ?5 t# o! a0 [
// the beginning of the loop.
' G# V" Y+ {: G. e8 Z! }, v4 M& |2 o6 y6 s0 S2 b
// This is a simple schedule, with only one action that is
8 r, D! c' e. ?" b5 J# } // just repeated every time. See jmousetrap for more) f/ r0 h, [+ |& R
// complicated schedules.
: H! h) `1 D: [0 K 7 J) E3 }- P( L0 y
modelSchedule = new ScheduleImpl (getZone (), 1);" X# C- }$ t- W7 n/ Q& Y3 X
modelSchedule.at$createAction (0, modelActions);
9 q) K0 O+ V7 o3 g+ |
& }2 R' V8 G" p: E& r r return this;* G5 h) Q& I" Q! q" X$ u1 z6 X
} |