HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- S, T1 y( n Q( D" C z& \
! G4 J; J& \2 U4 ?' s4 k( U' ~# n public Object buildActions () {
( G: t& z0 L' a* X+ |% F super.buildActions();
# U9 U% ]4 q* A% d( O" H
$ @. u4 ?/ D/ y/ u. a; z6 `4 X // Create the list of simulation actions. We put these in
P3 |" Z' T0 w, k2 P: M // an action group, because we want these actions to be7 r8 ?5 Y# y: i1 f* A
// executed in a specific order, but these steps should
4 k+ h1 c f/ ? t0 e' _7 a1 U // take no (simulated) time. The M(foo) means "The message
% v5 S H1 N3 p6 x# _ // called <foo>". You can send a message To a particular
" m( ]; k/ L W4 w0 ?# d. X9 @ // object, or ForEach object in a collection.6 H- R4 {9 |% ?* Z4 e& i+ F
0 y9 i5 @4 N5 U! E. e // Note we update the heatspace in two phases: first run3 k0 B" V6 Q$ W! F) `; y1 S
// diffusion, then run "updateWorld" to actually enact the
5 C- W7 C$ J# c h // changes the heatbugs have made. The ordering here is0 x9 V' ~. y' f+ d, Y
// significant!: H- t f! a, x6 y/ y) ^$ W1 @) X" b
/ [- w; O" [' d // Note also, that with the additional: o! t+ Z/ g6 g( h, L- K" s
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 C$ j: G! s" ~, z* ^ // randomize the order in which the bugs actually run
) Y0 C2 J) I' B2 Y1 [+ g( I2 ^& D/ | // their step rule. This has the effect of removing any
- ~8 K7 |, w) k0 y( K$ S // systematic bias in the iteration throught the heatbug2 Z9 g* g0 Y) s# I. E* m; i
// list from timestep to timestep6 u a4 C W7 C* [: ^& d' P7 a L
0 B6 o" {$ {$ v+ q1 P. G
// By default, all `createActionForEach' modelActions have! u+ u! @; H: U
// a default order of `Sequential', which means that the0 p0 f% }7 q* s' t- C- M4 ?) W
// order of iteration through the `heatbugList' will be0 O1 ]& W- y: L$ |
// identical (assuming the list order is not changed! T% t8 ] Z6 j7 G/ D% q
// indirectly by some other process).& ^4 o8 n7 g: I% \( _$ \8 ?$ S
: P' i# o1 w, a5 v* O
modelActions = new ActionGroupImpl (getZone ());! M0 a3 H( ~1 K1 v a& I
5 `0 w, K. _6 ~* t7 P! N0 {5 ?2 d try { {6 Z; ~7 `4 ]: c
modelActions.createActionTo$message
8 e2 F& ?/ ^7 U (heat, new Selector (heat.getClass (), "stepRule", false));; ^9 Y* m! ~7 c+ H
} catch (Exception e) {
0 [1 r& l" Q* ?1 w8 e. j; l System.err.println ("Exception stepRule: " + e.getMessage ());
! }+ I: B+ D$ G) V# Q1 @ }
) x) G3 T! T# M+ h2 Z* Z! w% S/ O& c9 G9 A# C( f9 D6 z l
try {
$ @ _# V8 _3 X Heatbug proto = (Heatbug) heatbugList.get (0);
# g) y6 r+ u+ g4 r s) ?% J Selector sel =
7 F9 a; I" @+ i new Selector (proto.getClass (), "heatbugStep", false);8 O8 A5 G1 w- B, s
actionForEach =- \. ? J( w. c% |5 L# X
modelActions.createFActionForEachHomogeneous$call
, P; D5 Q6 g4 ^3 W2 Q& l l (heatbugList,
6 b) T; X g4 c! i" ?3 x2 R- [ new FCallImpl (this, proto, sel,1 J8 Z$ V9 Z* \
new FArgumentsImpl (this, sel)));! v" R9 h7 c" i* D# h8 G: Z
} catch (Exception e) {5 R7 w# a) Y4 u' Y9 }/ \5 l, U
e.printStackTrace (System.err);
/ `1 o2 c+ p* J }
* `; u' f0 j9 s0 K( c" j1 ]# \
. S6 `8 ^7 \7 v syncUpdateOrder ();+ q8 X# t. i3 c. D/ J) N& A9 R4 P
. N9 A! b. x' d8 A' t- ?
try {0 P+ c3 }; w0 R
modelActions.createActionTo$message
7 R5 r8 ^7 ~, O9 c9 C (heat, new Selector (heat.getClass (), "updateLattice", false));5 L- r8 j' O. f3 O: ]. g: W
} catch (Exception e) {
- W# [" b B# l% _. r System.err.println("Exception updateLattice: " + e.getMessage ());
" P# S, E5 ?2 T5 r, [ }/ y( \5 c9 v) Y8 N* z/ K
. t4 [8 |- J, [ U& R // Then we create a schedule that executes the
" |, C! A( U3 y/ F% G& w' z* s5 x // modelActions. modelActions is an ActionGroup, by itself it1 G3 v% ] T" f) c" x9 m
// has no notion of time. In order to have it executed in
% e# G9 k& S1 ]! |7 ^" S9 \ // time, we create a Schedule that says to use the% a4 o. m+ A2 u6 q2 S
// modelActions ActionGroup at particular times. This: W* I- n+ n( I; W! M
// schedule has a repeat interval of 1, it will loop every- |) S* V$ J, z8 j7 K) `5 [; g
// time step. The action is executed at time 0 relative to' a9 P% a; t- O' Z _
// the beginning of the loop.
: G, c# k- K: i" R; c/ G) ^) a8 ^; J! u- Z' b
// This is a simple schedule, with only one action that is1 A, v$ I0 c0 ^6 O
// just repeated every time. See jmousetrap for more
* I" r' Q/ @3 _5 t3 p) Y" H // complicated schedules.8 R( I' D- V$ [! @8 w- c2 H! n
( A, t0 t6 a8 P3 L' X+ |- p1 `
modelSchedule = new ScheduleImpl (getZone (), 1);
: F: S M! {: s modelSchedule.at$createAction (0, modelActions);
2 [+ q' h8 }5 C0 F* o 8 Z: ~9 \: ?3 c1 K8 k% n* F- m- a
return this;
) | h/ w0 J/ R- s1 m } |