HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( ]9 r4 ]; M1 c$ i: O2 m
; L" s: d0 V( ^ public Object buildActions () {
8 h3 x3 n# Z& P" \8 [ super.buildActions();
; O/ H) ^& v: z& H7 T0 Z% s5 ?
/ r# Z- Y4 q9 k% ^7 a // Create the list of simulation actions. We put these in
4 Z2 O6 W" H7 c c* t+ [ // an action group, because we want these actions to be, k# m1 N7 X! S4 O' T* J% u) Q5 ?
// executed in a specific order, but these steps should
5 u; v4 l0 P7 b // take no (simulated) time. The M(foo) means "The message) ], q5 x1 W: S& e9 u
// called <foo>". You can send a message To a particular
: ^* c3 F( E3 j" J // object, or ForEach object in a collection.
) ^3 J+ d( @- _
0 {* f8 c3 M9 ~9 w& G# S // Note we update the heatspace in two phases: first run
9 o( v2 _& [& I8 j& U6 x // diffusion, then run "updateWorld" to actually enact the
9 u+ {! q- \7 a7 J0 r& g // changes the heatbugs have made. The ordering here is1 S3 O2 L* T0 t) u% {, k
// significant!0 g o( Z0 V. o
; O, ?: C$ ~3 X1 y) D% ~
// Note also, that with the additional
# o9 M- U1 @9 p5 }1 f$ y // `randomizeHeatbugUpdateOrder' Boolean flag we can$ Y+ k/ U* {2 `: U u3 }
// randomize the order in which the bugs actually run' l7 m9 v# U6 \
// their step rule. This has the effect of removing any
. o" N, D) E( H6 T // systematic bias in the iteration throught the heatbug
6 A) d6 T1 V+ B e% \& u/ z3 x // list from timestep to timestep
* p0 g2 I8 h) ]( \5 S
6 U- X- n1 _4 |# y I // By default, all `createActionForEach' modelActions have
) R0 m' C/ S3 k1 q // a default order of `Sequential', which means that the
- Y y2 f, @) d8 J$ A5 w // order of iteration through the `heatbugList' will be9 y r* z5 T6 G, `$ I
// identical (assuming the list order is not changed) @* I9 b, C* L) Z7 e
// indirectly by some other process).
4 Z: G+ k2 U! s- ^( l3 r) _ 7 w' ^# U! l8 ` M+ G4 n. R9 Y. N1 F
modelActions = new ActionGroupImpl (getZone ());
" y! c- V( w% L; @$ N; k; V0 A' N$ T' L% r" v, I/ U! k( p* ]* w
try {
( n, X7 q+ m! B. ?+ g modelActions.createActionTo$message( \% O6 ]; k( a
(heat, new Selector (heat.getClass (), "stepRule", false));6 I( Y6 q6 u) L1 [' v; h" ?
} catch (Exception e) {
# T$ [7 z2 U$ o" z: u, L8 E System.err.println ("Exception stepRule: " + e.getMessage ());% E. k( ?8 n [- @
}6 Q" y' C, O; k' T
. c3 f9 o7 @* _5 v6 ~
try {9 V# a% Q, o) ?" |+ O! r
Heatbug proto = (Heatbug) heatbugList.get (0);3 l$ N1 e, O1 A/ F+ q
Selector sel = , X* n2 n- Y4 ^6 [
new Selector (proto.getClass (), "heatbugStep", false);0 Y5 N* b" X/ j" R! @. A
actionForEach =* Q0 _! x6 \2 q& W/ X
modelActions.createFActionForEachHomogeneous$call( c2 k w, o- K
(heatbugList,
" P7 ]2 e" u$ k* c3 r/ `9 ? new FCallImpl (this, proto, sel,- j/ F% J1 X' x0 o0 T0 v
new FArgumentsImpl (this, sel)));6 r+ r# B! W: F. U4 U2 o5 F
} catch (Exception e) {) G# T3 V6 M& e2 `
e.printStackTrace (System.err);
$ p Y. \3 d! I$ U }
8 c+ }. L# p% C5 V8 M. G. n& [ ! s L0 _% F' _$ o; o+ Z1 l; X" s
syncUpdateOrder ();
+ \9 D% K- K5 `9 \7 N {2 z) a: S, w1 u0 x/ A: Y
try {
+ ~9 J' d* L9 F% t! Z5 p modelActions.createActionTo$message
& T9 ^" Q0 Z' j9 _6 [ (heat, new Selector (heat.getClass (), "updateLattice", false));
/ g! J* {3 n& K: p( }- u } catch (Exception e) {
. T. Q$ t# x- K$ F System.err.println("Exception updateLattice: " + e.getMessage ());" |- h# a& ^4 }
}' j5 _$ D% i. y4 p- I
3 C6 e% c8 g+ P8 K% V$ x% F
// Then we create a schedule that executes the" h8 T* u6 I3 {9 O" U
// modelActions. modelActions is an ActionGroup, by itself it
) {& L" {2 v8 C9 R // has no notion of time. In order to have it executed in" P8 B: I ]% a$ y) s" L
// time, we create a Schedule that says to use the; E" s& p S% j- z1 X
// modelActions ActionGroup at particular times. This- `9 q5 H1 K% m
// schedule has a repeat interval of 1, it will loop every: ^1 ^4 r$ e% A# X/ R) L
// time step. The action is executed at time 0 relative to }4 s( ~* N4 Y$ f
// the beginning of the loop.( e" S# L* N/ w" @
$ Y; a/ }/ Y% A1 G2 w n2 } // This is a simple schedule, with only one action that is' J6 d4 r3 x" v& Q! C/ X
// just repeated every time. See jmousetrap for more
9 x- A3 [3 \* J" ^* C. [ // complicated schedules.
, r* v/ m' Z! t- N" ^
! d6 r5 i' k" A8 S( u- y# e( M modelSchedule = new ScheduleImpl (getZone (), 1);
, Y6 T8 e; }5 D- r+ b modelSchedule.at$createAction (0, modelActions);7 y. s1 C" {/ q+ P; |
' R! q6 e! E+ ~0 f. T# h9 J. g5 W return this;
# a) H* Y$ z G, w, g7 o4 b } |