HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 E% N. u, u% m& M B9 y+ S: } y" q9 ?8 E& }- u* K
public Object buildActions () {
; x+ S. ~ V( i, W0 x super.buildActions();
# O* X5 M# e# K8 |5 A l, ~) O. C" A# X% H1 }
// Create the list of simulation actions. We put these in+ B! v5 M$ j+ e1 I" T: s/ m* _8 B
// an action group, because we want these actions to be
* q* g; i' f. r. Y+ \6 [% O6 ?; _$ t) X // executed in a specific order, but these steps should; z# y$ f3 n; o9 A* O5 U0 F) Q# m+ `
// take no (simulated) time. The M(foo) means "The message
8 D7 V% a/ ]8 @1 h // called <foo>". You can send a message To a particular
/ ?' ?- p( z2 X: V" D // object, or ForEach object in a collection.
1 r( W4 {1 O2 o4 u: D! }1 C 6 n# P' x: h+ ^+ i
// Note we update the heatspace in two phases: first run
3 q8 W( n8 }& x3 ] { // diffusion, then run "updateWorld" to actually enact the/ d+ |# a% C- b( I+ c
// changes the heatbugs have made. The ordering here is
- U7 F& @0 F) x // significant!
/ ], R9 ] t4 {) w9 S
- U1 i8 J3 T, L0 w( w& Y // Note also, that with the additional
' d1 B& i; `( n, F0 J // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 w# W1 z" W7 P. U* T // randomize the order in which the bugs actually run2 U; ~ \9 F* ~# K# @0 s
// their step rule. This has the effect of removing any
, O: Q, z: a' G' a2 ]2 H // systematic bias in the iteration throught the heatbug
8 v3 U* Y, Q, W3 o4 r4 f // list from timestep to timestep
7 {" }, [/ W; _" F& x + U7 C- E1 X' ^( N
// By default, all `createActionForEach' modelActions have
& m$ u6 W3 s5 ~- w; C, x // a default order of `Sequential', which means that the
8 Q( b" k9 r8 w- m% ~ // order of iteration through the `heatbugList' will be) P5 b9 k* y# b0 V5 p
// identical (assuming the list order is not changed$ ^9 [+ s1 i/ y( U% W
// indirectly by some other process).5 n7 l- T1 C/ t
: L4 f; N$ F; u7 B modelActions = new ActionGroupImpl (getZone ());
0 |8 F4 F1 Q: E4 v1 @3 ~+ E% z4 J l% ~7 x* o) v5 p9 M0 H
try {- Y6 h& ~: c; ~ E" i# T2 C
modelActions.createActionTo$message
9 f' c9 E1 ]2 Q! K, P* @2 A (heat, new Selector (heat.getClass (), "stepRule", false));
- e4 S6 y! @+ s7 Q9 w* v2 I } catch (Exception e) {
: B) b: u9 j- ?5 K+ l8 n% [3 h System.err.println ("Exception stepRule: " + e.getMessage ());
: T" @1 I% g' g: Y }
2 |- P# Y a8 v9 w3 V3 @7 p( u |) q- V, N" U& u% e/ o! e" e
try {( J- P4 B" t$ Z( k2 N' ^# g
Heatbug proto = (Heatbug) heatbugList.get (0);$ [$ H i% r/ k' v, @4 }7 Z. Q
Selector sel =
5 q+ _; Z( U4 G3 i new Selector (proto.getClass (), "heatbugStep", false);7 d @: H# P* R# W" j; f! ~
actionForEach =9 n4 Z- Z9 z$ v2 A$ {- Z/ m
modelActions.createFActionForEachHomogeneous$call' o. N' [8 n+ m- N' l# l' t3 P; J5 l
(heatbugList,' V# K& P0 X% u0 f5 P2 m
new FCallImpl (this, proto, sel,, a" i! B! l o1 J1 c* l
new FArgumentsImpl (this, sel)));1 Q+ ^0 `2 [# p
} catch (Exception e) {/ \+ ]/ w) |+ f( f
e.printStackTrace (System.err);
7 L$ [9 R0 L5 ]" O. f }
9 Q, N {9 f5 C( o
+ |, {$ j) [# G6 u2 k% g syncUpdateOrder ();6 M; `; \$ B% _* X% ` }
; B/ v) {/ M, h# S( A& Z
try {; z/ f5 j1 y7 O9 s4 F+ J
modelActions.createActionTo$message / f W+ `& i, z" C/ J# Q
(heat, new Selector (heat.getClass (), "updateLattice", false));! {* j% B. k$ w; l& U/ X7 M0 l
} catch (Exception e) {
5 M4 |+ w! X- y, i# ? System.err.println("Exception updateLattice: " + e.getMessage ());
% u( \) x' s& N" L0 u( f* f }' i$ T( I0 `1 H2 `" [+ b c* B0 f8 M. S
8 m8 F. F# u% F+ Z e* a // Then we create a schedule that executes the6 o; m, X( Q" B7 x
// modelActions. modelActions is an ActionGroup, by itself it
; Z t, J0 W1 L, b' W. X1 @5 l // has no notion of time. In order to have it executed in- l# Y, i( r( T/ m) i) U
// time, we create a Schedule that says to use the
& {9 D1 C8 |0 Y2 s // modelActions ActionGroup at particular times. This
( y0 O8 F: R0 U6 Z // schedule has a repeat interval of 1, it will loop every
$ t% b- z3 C5 K) L7 ~& D // time step. The action is executed at time 0 relative to
# `$ N: p& _; d( v/ ?. W. g // the beginning of the loop.1 V0 Q+ x3 [9 {/ Z
* Z4 h4 Y7 k. ~. g# H- L; E
// This is a simple schedule, with only one action that is$ l" D" _& a) w( g( }0 _9 b
// just repeated every time. See jmousetrap for more1 X0 V6 l5 G3 s D
// complicated schedules.1 a4 h: b4 s! |, \
# P0 y$ n3 {; P1 }4 @" |- V# S% C5 A modelSchedule = new ScheduleImpl (getZone (), 1);& w! C+ I- x) ^ t6 j! ?
modelSchedule.at$createAction (0, modelActions);# }8 x. b1 G5 o
; ]+ E4 A) o" l; X. w return this;
7 m( J: i6 s1 e6 F1 c# _5 ?7 c" j' Q$ Q } |