HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( z* o5 x" W. r, ]; s' l, ?% m2 D7 y
& M0 _- |2 d- Z' C public Object buildActions () {. M1 x1 {" J. ~, G0 y: q- X1 ~% x5 m
super.buildActions();# @* H. }# h1 R' q! R$ P% v, J
b8 r3 _" z/ G: @0 o: d# I
// Create the list of simulation actions. We put these in; Q( y" a2 @8 y' @
// an action group, because we want these actions to be) {6 C4 ~: i, _% E0 L+ @. g
// executed in a specific order, but these steps should
- Z* o- o2 y; R4 h // take no (simulated) time. The M(foo) means "The message
; p! Z3 f: f* s // called <foo>". You can send a message To a particular
; H7 R1 u- A8 B. d // object, or ForEach object in a collection." L1 `5 q7 {' P, k7 j
7 C& N; E+ R: U. \$ z3 E8 K
// Note we update the heatspace in two phases: first run( e6 Z `4 k! ~! ~, v( G" \
// diffusion, then run "updateWorld" to actually enact the6 [9 B- L6 b& P/ K: P8 \4 V
// changes the heatbugs have made. The ordering here is5 I n# D2 I- N: F* r' t3 A
// significant! z3 E, W* F( x% T' A( k
4 U- g- ~& J9 l B8 b( u // Note also, that with the additional* s8 r9 [( F- s( J
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ q! B% V: E" ?2 `$ U
// randomize the order in which the bugs actually run
; D4 m3 l0 I% \9 s // their step rule. This has the effect of removing any5 s4 M# o( |8 `8 k3 }; G
// systematic bias in the iteration throught the heatbug: a& G! W5 I4 u/ ]1 H+ y
// list from timestep to timestep
1 z; N# j7 e/ A# L
, L% X6 H2 p. k b% q // By default, all `createActionForEach' modelActions have* ^& \/ G. Y4 ]* b( ?% e' M
// a default order of `Sequential', which means that the2 n6 |7 e+ l2 l) v4 c
// order of iteration through the `heatbugList' will be* B) p$ Y8 Z. S
// identical (assuming the list order is not changed0 E$ v+ O1 q' M% s
// indirectly by some other process).
- }7 B1 U. C: K" Z+ j
. g! b2 W% X& P modelActions = new ActionGroupImpl (getZone ());! [4 u" w# u D% g7 D, A& [% j
" X: Q9 S9 \- X0 v5 @ try {
% u F6 v; Y( l modelActions.createActionTo$message8 X$ P( r# a/ }% G
(heat, new Selector (heat.getClass (), "stepRule", false));
# x3 A* }/ }' v/ J9 S) T# {+ D } catch (Exception e) {1 d9 V: Y/ C5 R: I- Q& c' D
System.err.println ("Exception stepRule: " + e.getMessage ());
# k6 T7 c! b# n/ z5 `4 ? }
. E3 [- \8 D6 Z
: c' t# r) r1 b2 z- h) J& t6 l try {0 X8 Y6 Z6 T1 I# r& q
Heatbug proto = (Heatbug) heatbugList.get (0);5 n( s, f! v6 {! \* {
Selector sel = 5 A/ F7 C/ ?( T( q& u% j! H
new Selector (proto.getClass (), "heatbugStep", false);
" |& Z* r% o5 ]0 t9 b0 k actionForEach =
3 O T" b( [- j$ `* l modelActions.createFActionForEachHomogeneous$call
$ Y; D6 A9 V* @" J/ A( x) D0 P (heatbugList,
, ^6 k: l# l" ^9 a# V9 C new FCallImpl (this, proto, sel,+ F& v8 N. f: y! U$ }! b
new FArgumentsImpl (this, sel)));& y3 A# S8 J+ E
} catch (Exception e) {5 L/ P( q8 s* C
e.printStackTrace (System.err);/ _0 Y! ]9 d/ ~$ B% p3 G0 P( h% d6 r
}
; T& X4 C' ]' Y# _
; ^2 v( n' k9 a syncUpdateOrder ();; ?+ s6 w$ z& w4 r9 J7 f. t8 s: S
4 S2 `. c7 R9 J# [6 `3 X try {- B0 R& T/ _: s$ Q
modelActions.createActionTo$message
% f6 X3 m o/ y$ \ (heat, new Selector (heat.getClass (), "updateLattice", false));5 O" i0 t8 Z) J+ p% F8 e
} catch (Exception e) { F9 g* a3 F, |. I
System.err.println("Exception updateLattice: " + e.getMessage ());2 {, Y6 ]% M r; G2 Y5 m R a% S
}
9 \5 J8 {" i/ U - n6 I( _0 e0 x5 k* W( Z" `6 Y
// Then we create a schedule that executes the9 C1 N6 i6 {' p, p+ ^7 m8 |8 P
// modelActions. modelActions is an ActionGroup, by itself it+ M/ a; _: d) g3 g; d$ v4 M5 ]8 `
// has no notion of time. In order to have it executed in2 H |1 D X7 V# E6 b6 q7 c
// time, we create a Schedule that says to use the0 y& f6 ]% ^6 t, ~
// modelActions ActionGroup at particular times. This
+ W4 Z) N9 `. \8 K // schedule has a repeat interval of 1, it will loop every+ V' ^0 _6 e7 o' ?# ^+ c% @
// time step. The action is executed at time 0 relative to
. G+ Q. N1 F- i6 X6 |5 j9 @- C // the beginning of the loop.
! C0 A; ]& l- U6 z6 r6 z" N/ u" p* f! Y- J
// This is a simple schedule, with only one action that is( r( D y: a- y( [! m" V
// just repeated every time. See jmousetrap for more0 A& p# E1 J- I u( K& u# o$ D
// complicated schedules.2 L) {8 S' A1 p; n/ S* C; Z' S
( \% {$ P, O5 g' T4 N% D; e7 U n
modelSchedule = new ScheduleImpl (getZone (), 1);- T( V6 _$ g0 [
modelSchedule.at$createAction (0, modelActions);
% ~1 E% }# s: C ! H/ j7 F# F0 ~* o# ]$ p& [
return this;
h+ |* S+ r1 Q4 D$ d) p } |