HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' A ]- _ }3 N% V
2 W' f/ U/ Y4 A/ S L! Y0 R public Object buildActions () {
" f/ i: D9 ?9 i! \, |8 P super.buildActions();" P( k: L! t! w+ x* j3 m F
$ }* c9 }; }6 l( V2 X( u
// Create the list of simulation actions. We put these in! v& M6 F. \* C) ?0 w A Z# } f
// an action group, because we want these actions to be, }. [ Y% d* o; _
// executed in a specific order, but these steps should/ P0 n* C. C Q( h% W& O
// take no (simulated) time. The M(foo) means "The message
, A) W5 @; k3 C+ I) [/ _ // called <foo>". You can send a message To a particular6 E1 X3 G/ t: ]& G7 U2 M1 j5 @! t
// object, or ForEach object in a collection.
: p' r p! N; i* P( a% _
" L6 G" J" E7 F // Note we update the heatspace in two phases: first run9 I7 p8 Z" }# m& f! E
// diffusion, then run "updateWorld" to actually enact the
& x* p! |1 @) m8 k! q2 R/ M // changes the heatbugs have made. The ordering here is
* ?4 Q9 Y7 s; U" d$ D G // significant!. x/ Q: Z9 {$ b/ k5 T8 H
8 s C, P0 t3 z3 X+ O" s3 G' _ // Note also, that with the additional
2 V3 J# z6 C6 \) K // `randomizeHeatbugUpdateOrder' Boolean flag we can1 j5 q5 u$ P$ y+ i3 B$ H \; f
// randomize the order in which the bugs actually run/ u6 T3 y. W C+ j% c9 F; Y4 ~
// their step rule. This has the effect of removing any: ^, V$ B! s' d1 C$ w
// systematic bias in the iteration throught the heatbug
& V u, C. r8 |, e // list from timestep to timestep
& g1 W/ T0 D) q { i8 c% k. e
" i3 ?; p a1 L/ V6 `- t7 f0 w& D // By default, all `createActionForEach' modelActions have" q9 S2 D H1 D% A
// a default order of `Sequential', which means that the/ d( i" d7 E4 n* ]
// order of iteration through the `heatbugList' will be
: P' l5 d R: r. d' I2 W% u! R) k3 x // identical (assuming the list order is not changed
4 h2 y6 O! p+ Q // indirectly by some other process).3 H7 C) x+ h" l# A9 G
. z2 u* f3 N1 n! \7 i modelActions = new ActionGroupImpl (getZone ());4 o2 ^- ?3 K: n+ W: f) U% ]! H
0 M; @& Y$ x$ a8 K- R& ^6 o
try {: U7 t( I8 {: F* x6 X
modelActions.createActionTo$message
C1 A6 f; z& ?9 W1 {: p (heat, new Selector (heat.getClass (), "stepRule", false));
; c+ s1 L1 Y* O" E( u' N } catch (Exception e) {0 B% o' e/ u- X; A' b
System.err.println ("Exception stepRule: " + e.getMessage ());: P$ j3 J/ f; P1 }8 n# E) }
}3 J0 R8 g: B i. v. m9 e7 d
" x9 o6 j0 A! a( w8 U! H
try {: o( f3 F: f6 X1 @
Heatbug proto = (Heatbug) heatbugList.get (0);( e% E# N$ c3 `8 ]! [- e
Selector sel =
( E; ?0 f8 W# L& X( I. g. k new Selector (proto.getClass (), "heatbugStep", false);! D5 \: n8 e+ R3 |* z
actionForEach =" G: Y$ f* a' Z3 L8 U$ b3 A! V. Y
modelActions.createFActionForEachHomogeneous$call
6 R8 E& T* n. k (heatbugList,
2 h6 l( x. ^0 h5 h& o1 Q& B new FCallImpl (this, proto, sel,
6 M0 S* Q9 y, n/ H8 h: e* ? new FArgumentsImpl (this, sel)));6 k$ k2 E: U" P7 m- i
} catch (Exception e) {) k* l; p2 H4 ?4 H0 |- {% D
e.printStackTrace (System.err);, N. }8 y+ `4 X5 H; g; r
}- G- U6 v2 I& x- u/ G8 F
' o+ E- N; ?3 b* D
syncUpdateOrder ();
% j- r$ F& u7 U8 v; r% q6 b- `
5 O5 O! f# M9 _7 e& V" B try {
% b4 {4 `9 ?' o/ ?0 C( | modelActions.createActionTo$message
3 H2 Q' j, e: V+ t (heat, new Selector (heat.getClass (), "updateLattice", false));% Z" W( E. `2 B3 H) _0 g3 c$ N# ?
} catch (Exception e) {
/ r5 D: v7 P. R) j* k System.err.println("Exception updateLattice: " + e.getMessage ());
9 b& N0 G$ h; g }9 a8 ]# N" s! y B
- T( `0 o/ a$ l' c \) D // Then we create a schedule that executes the
7 s4 R) h; }8 Z5 H3 C4 ~. e8 T // modelActions. modelActions is an ActionGroup, by itself it# Z* q, f/ H+ H
// has no notion of time. In order to have it executed in9 W) E- X# ^5 m8 v' y. }
// time, we create a Schedule that says to use the
* Y2 P& i7 l9 H) [ // modelActions ActionGroup at particular times. This
+ R6 B8 X0 W7 S% b // schedule has a repeat interval of 1, it will loop every) [; | I% P1 [ D' d
// time step. The action is executed at time 0 relative to9 `, ]3 ?: V! b; _% q' s/ k: u9 v
// the beginning of the loop.' _+ a( F( m2 c z i- z
/ a! K. u; C$ J9 t6 u
// This is a simple schedule, with only one action that is
3 M8 y- G0 M+ R: [ // just repeated every time. See jmousetrap for more8 f$ N ^* L3 P$ G; p+ U) m3 Z& q
// complicated schedules.
! a- `" E% u' F3 C
5 }9 x$ G7 y- Z6 s modelSchedule = new ScheduleImpl (getZone (), 1);
" d, O, F; [ p+ I- [5 C modelSchedule.at$createAction (0, modelActions);, {8 p! _. Z0 e. i' ?- k
2 \! C5 [( b8 x- ?. |; A
return this;' l8 H2 R9 L: ?) O8 e/ |
} |