HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% [+ r7 g* [5 \. v/ C* Q2 g+ ?: Q& ~! \
public Object buildActions () {
+ ?% [/ j4 p" q super.buildActions();7 |: u0 c" I% y% Y8 f4 o" H
' C/ z$ J# {/ v9 q
// Create the list of simulation actions. We put these in7 u/ n6 K9 i) Y; O* G8 p/ M
// an action group, because we want these actions to be
$ f, p# F3 R b6 \2 m0 z/ I // executed in a specific order, but these steps should) K' z9 k# s( x v" T8 e- G' x2 U
// take no (simulated) time. The M(foo) means "The message
, {5 l; V' r# x // called <foo>". You can send a message To a particular
$ B: d7 O0 T/ i2 n // object, or ForEach object in a collection.
+ o% k3 q8 S7 U6 I9 s0 N* J/ d6 l9 k ( P7 z. v# {2 u' f0 D! ? i
// Note we update the heatspace in two phases: first run
) D; S0 k6 _7 |& a+ i8 z0 A // diffusion, then run "updateWorld" to actually enact the
% `& z4 j( k% C/ a% I; ^; v/ U) \ // changes the heatbugs have made. The ordering here is! h! s, X. u. i/ C4 \' \
// significant!
+ a* [& e3 a7 e: |( Y8 c3 Y
+ @; ?/ X* H+ B( s // Note also, that with the additional
* `, v9 [0 _# |2 D // `randomizeHeatbugUpdateOrder' Boolean flag we can
& E% A* T! r9 n' k7 { // randomize the order in which the bugs actually run* y1 [4 g! O$ [/ l
// their step rule. This has the effect of removing any
2 l* B: @4 E H( _3 Q; n // systematic bias in the iteration throught the heatbug) i. [( i7 f5 Z1 O h
// list from timestep to timestep" y/ z; x8 L4 Q
; b3 a0 V. N0 F
// By default, all `createActionForEach' modelActions have
6 V' E. ]& x. d- z5 D) }8 B0 Z6 [ // a default order of `Sequential', which means that the) j! j& b5 B6 q4 H" b/ b9 E" i% F
// order of iteration through the `heatbugList' will be
5 _0 z8 Z$ g3 w: T8 I // identical (assuming the list order is not changed5 @. {3 H5 h% Q: n: R
// indirectly by some other process).$ J3 r2 Z' B5 K. ~$ Z& {% e
, b4 l- h+ w3 B4 ~) ?
modelActions = new ActionGroupImpl (getZone ());( x$ O: q! E' `. i
3 Z" l. v5 `: p2 z1 P( W try {
& _: D. J0 B) h; o- U u/ {1 E+ W, a; q modelActions.createActionTo$message, B, L0 U( z' M. E! s J' k0 P" `
(heat, new Selector (heat.getClass (), "stepRule", false));! Z9 p/ g. C7 ~5 J6 t
} catch (Exception e) {
* |2 K( G7 K* Y% l: t' w0 M System.err.println ("Exception stepRule: " + e.getMessage ());
* g6 R3 b; Q4 Z }
, }- `; H) ]' N2 r5 s
" n/ c5 v( n9 S( i/ F0 ` try {( j8 O t5 m& ?" C
Heatbug proto = (Heatbug) heatbugList.get (0);2 S% J" `- F# H5 R
Selector sel = & L* j$ n0 Y% L$ b- v3 ^6 d
new Selector (proto.getClass (), "heatbugStep", false);
$ B* C/ e4 f/ w. w J actionForEach =+ o' Z- m$ [& H0 h
modelActions.createFActionForEachHomogeneous$call
" i) v6 d+ U* U (heatbugList,) r" \4 a! O( Q0 L# g/ g
new FCallImpl (this, proto, sel,6 _8 _+ L, i Q4 M- c3 U
new FArgumentsImpl (this, sel)));
7 h* D& {3 r0 w- S8 O } catch (Exception e) {, s9 Q* _7 Z$ e/ E3 a2 o
e.printStackTrace (System.err);
# L+ Q g" h& Z" x0 E: ~ }
2 z: m3 K" ]: E5 W+ Y, `
3 t( z& z4 c1 C syncUpdateOrder ();
& N# i1 }# I" ]3 J1 u. K" z [& ]3 k) M9 z: A
try {! z; u j- {" e/ x" f. _# G
modelActions.createActionTo$message - B8 p3 c4 s( b5 P5 z# U
(heat, new Selector (heat.getClass (), "updateLattice", false));; y+ P4 H# j) r, Q
} catch (Exception e) {9 y, ]; q$ q/ l8 n' i
System.err.println("Exception updateLattice: " + e.getMessage ());
7 @! F6 t) }. O8 `1 m }: n/ l8 O5 c! W! Z; d8 y, G6 \
( {6 F( M( z4 e/ x# Z; ? // Then we create a schedule that executes the
3 A% G5 i7 {( m# E p) w( n9 ^' q // modelActions. modelActions is an ActionGroup, by itself it, J5 g) _$ h- d7 Q6 E
// has no notion of time. In order to have it executed in" }- W, v. y5 T! x- s
// time, we create a Schedule that says to use the
: o2 v' }' [$ u0 {: d; y* v // modelActions ActionGroup at particular times. This, ^) H/ ]9 s% z# g/ S: C3 F5 V ?
// schedule has a repeat interval of 1, it will loop every z$ U9 ^4 }6 y, o
// time step. The action is executed at time 0 relative to# S/ ^1 \: r& C7 Q% r1 c1 |7 t
// the beginning of the loop.
/ w- {6 s. l/ m. M4 j* n3 Q. L: F1 v
// This is a simple schedule, with only one action that is
. N, ^# B) ~# U/ h3 k3 |1 D // just repeated every time. See jmousetrap for more5 P& h3 w9 H# g( j C) x
// complicated schedules.( m; b/ A5 s+ Z' I8 e
$ b6 |! h; R+ [0 y
modelSchedule = new ScheduleImpl (getZone (), 1);
: ]2 l. [0 `. B# V" T, M modelSchedule.at$createAction (0, modelActions);
0 G5 T4 B0 X0 O2 T8 E- L' j9 D
) J+ j+ U1 e! C5 s- e return this;
- n' }5 Q1 E* G4 u3 N } |