HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& y! S6 j' u. I: b+ U
1 A3 ]5 C' k" j3 S# B3 ^
public Object buildActions () {3 b& J0 U g6 Z, `
super.buildActions();
2 f, k9 ~9 p/ h2 U6 ^ * x' b; ^1 S' x$ B; H- u
// Create the list of simulation actions. We put these in
B o. v3 j( h B3 S2 u5 |( R // an action group, because we want these actions to be% e4 U8 Z* f( E# @
// executed in a specific order, but these steps should n3 j; S$ O0 `+ Q+ w
// take no (simulated) time. The M(foo) means "The message
5 Y: P) ^% Q5 h* T Q- U, ^; U // called <foo>". You can send a message To a particular
3 @, \4 G/ r' r5 X; Y // object, or ForEach object in a collection.+ O& C- w2 i. R% w+ N3 L$ a
% f& g, H( D" y
// Note we update the heatspace in two phases: first run3 u6 R k, f* C) L1 U2 m U
// diffusion, then run "updateWorld" to actually enact the
0 b5 O' n* V& N, i. Y // changes the heatbugs have made. The ordering here is% f3 {: ^6 ?. I8 h
// significant!
o, H+ }7 d0 p ) j/ N7 R0 N. E* c
// Note also, that with the additional
: S d0 v" e: v8 U // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 J; M+ Z9 y1 Z* R7 l3 _ // randomize the order in which the bugs actually run
( h( t0 c" c$ ^+ V$ g9 b7 U // their step rule. This has the effect of removing any
' f$ n/ W; N" ?, {# b; N. r6 j) e // systematic bias in the iteration throught the heatbug% M: T% L5 r& `! X8 f
// list from timestep to timestep
H, O4 O/ i3 n9 y' M1 Q" ^ . r: M8 F5 F* Y! O/ Q1 ]# v
// By default, all `createActionForEach' modelActions have
+ u! s. d8 y4 ?: F7 n7 m0 W // a default order of `Sequential', which means that the2 J: x* Q- U9 d+ }9 n
// order of iteration through the `heatbugList' will be
7 b) y9 v" P0 G- d+ V7 o4 ~ // identical (assuming the list order is not changed
! [8 u2 k9 H5 }9 T& t8 A& T // indirectly by some other process).
8 b, o6 b8 ^1 J4 `8 p
5 T& x$ P' p. G3 Z! _ modelActions = new ActionGroupImpl (getZone ());5 n$ ?* I6 k. U. f# q
6 F0 x( q: V' ]: L try {
6 N* `/ B4 W9 Q# x7 I' g& S modelActions.createActionTo$message3 `5 X' z x& S- {- L( r
(heat, new Selector (heat.getClass (), "stepRule", false));3 T8 q$ R( w: o
} catch (Exception e) {5 R5 K' S% S3 M. t9 t9 v
System.err.println ("Exception stepRule: " + e.getMessage ());
$ ~* i) `8 H- _7 g' V. i, D) ]5 ^ }0 i" G8 u; t8 s0 f9 `
0 W( I9 Z$ w+ Q7 ~ try {, M2 J& W& B1 F
Heatbug proto = (Heatbug) heatbugList.get (0);) t1 a: t. r" ?' M1 C, n
Selector sel = X0 |: E' I- ?" x A% k
new Selector (proto.getClass (), "heatbugStep", false);' o2 j2 j! ]! c6 S+ G) g
actionForEach =; n" d U8 ?# ~9 b
modelActions.createFActionForEachHomogeneous$call# I" `; s {9 r& Z& \3 z7 s
(heatbugList,6 c# B: ^; G% A- _8 ^, P" d
new FCallImpl (this, proto, sel,
+ u# K, c) r1 C) i4 T$ P( ^ new FArgumentsImpl (this, sel)));
) w- a* N( e# r4 F) k* e } catch (Exception e) {3 f' ]) L; u9 w9 _
e.printStackTrace (System.err);, c& X7 ^* J! A3 b
}: V% z- T. X7 Y
& O4 k9 z8 ^' m/ ` T
syncUpdateOrder ();9 |, f4 [% L" y) A; Q. i# x
5 @2 ^* M( A2 ]; j4 Q0 | try {, S( G% i; g8 {' o
modelActions.createActionTo$message 5 F2 H3 n+ X" h, j/ X4 u j; J
(heat, new Selector (heat.getClass (), "updateLattice", false));
' h6 D: z+ Z. Y0 K5 Z8 C } catch (Exception e) {9 N( w6 l% H% h2 |( R
System.err.println("Exception updateLattice: " + e.getMessage ());
2 _( U7 B8 f) K3 q5 E }
2 J: F9 ]1 U2 r: S4 ?
0 c) c" u4 m3 e$ x: V // Then we create a schedule that executes the
+ \7 }% ?% i. Y/ l% k- L // modelActions. modelActions is an ActionGroup, by itself it
) f$ h1 r! C( {/ V) i j // has no notion of time. In order to have it executed in5 {* ^& r, `% e$ `
// time, we create a Schedule that says to use the& s8 R! X/ L5 ` d5 z0 z
// modelActions ActionGroup at particular times. This+ y4 Z) l& J9 ~8 ?: G5 I7 S
// schedule has a repeat interval of 1, it will loop every5 W- ~) C0 a& | X5 ~7 z) \
// time step. The action is executed at time 0 relative to/ _9 k# Q9 ?' W0 p
// the beginning of the loop.
5 ~0 w c5 P/ s/ R% ~# X/ [/ `8 [% f- Y0 A. g1 h$ _4 I
// This is a simple schedule, with only one action that is E1 d/ R7 e9 u: F+ \: c5 J
// just repeated every time. See jmousetrap for more
9 t F- i: l' O // complicated schedules.
; [5 P* c: |7 { 4 Q4 H2 l; S4 |# k/ p9 f8 B
modelSchedule = new ScheduleImpl (getZone (), 1);2 k7 i1 X2 X6 O/ e! C
modelSchedule.at$createAction (0, modelActions);
: p, L' N7 t( `9 m
) o0 z% c5 @4 P# g return this;
: @+ j& @) {% x0 a% E, `# q6 r5 d } |