HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, g( i8 t# h# Z& Y, i8 g/ q
6 g$ D F# Z ~/ r) f public Object buildActions () {* E( y9 ^3 T/ ?8 O
super.buildActions();% |( l/ z( q ?( n) D( @+ o2 A6 f
* s1 p0 l# {* e; F" r6 C4 S9 `7 f
// Create the list of simulation actions. We put these in
4 h2 i4 U* c1 U // an action group, because we want these actions to be
6 D% T+ Z- }+ ` q0 C6 q7 k" h$ ] // executed in a specific order, but these steps should
% M1 D0 U. G& n i; M // take no (simulated) time. The M(foo) means "The message
+ X, f" C5 L) E: L" j7 z // called <foo>". You can send a message To a particular) [. c8 a1 `" v9 P0 w2 K! A3 w- B
// object, or ForEach object in a collection.% I) b0 a8 o `0 X8 A
" v8 A0 a* b5 |* A // Note we update the heatspace in two phases: first run& I5 l- V5 r$ l; y$ R
// diffusion, then run "updateWorld" to actually enact the
9 d0 E9 l! O- t // changes the heatbugs have made. The ordering here is
3 i4 |2 q9 q6 H. r) \2 [ // significant!" }0 N* S6 d; y$ h9 S
4 `$ c0 a4 l* V. h- t% c
// Note also, that with the additional7 D. } N8 U0 R8 C p
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! Q1 Y; Q8 v+ N1 P5 r$ ` // randomize the order in which the bugs actually run
q0 u* ]7 y! F; E // their step rule. This has the effect of removing any; |7 s8 w: } D! O1 b. L+ r
// systematic bias in the iteration throught the heatbug
1 u$ X b2 c0 V // list from timestep to timestep$ n7 c$ ~% E( B4 w) k
% ~' E- T2 O' ]* }
// By default, all `createActionForEach' modelActions have
+ n/ ?4 l: N/ n; V. O" ~9 l // a default order of `Sequential', which means that the; J8 [9 I, v+ e0 } ~& O
// order of iteration through the `heatbugList' will be$ o2 }6 b- T% g5 U$ t
// identical (assuming the list order is not changed. K' R% p: z7 V9 ^) Z
// indirectly by some other process).
. f2 }+ Y2 h$ N ) } r! n5 l3 a, k2 m
modelActions = new ActionGroupImpl (getZone ());+ w( x3 }! m$ Q
6 ^0 N. T h% _1 F8 B
try {: S2 I1 d7 j. D% G! X [0 {. n( V
modelActions.createActionTo$message- D, M/ A( L8 J5 O* J9 ^
(heat, new Selector (heat.getClass (), "stepRule", false));
" R, `- p8 @9 L h. Z } catch (Exception e) {+ v" M8 j8 x. o3 ~/ e
System.err.println ("Exception stepRule: " + e.getMessage ());3 @5 X. ` N" A# Z" u
}
) b4 o6 {. m i. R- t/ L& I( G& X X0 N
try {
; C* Z8 l2 S& l$ C5 y' T6 K Heatbug proto = (Heatbug) heatbugList.get (0);
5 z) i( B! A( G4 `( H1 J7 S6 M Selector sel = , R' f3 t2 l! J9 w# m# T" e4 G
new Selector (proto.getClass (), "heatbugStep", false);
: j7 e e* O2 A, |! y/ A1 f" v actionForEach =
; D' q- h) a5 ~. ~/ ?& _5 J: @7 P9 z modelActions.createFActionForEachHomogeneous$call
7 {( R" l* C+ k: f1 I" t (heatbugList,
% M* ^1 Z* V" g1 t- X3 ` J new FCallImpl (this, proto, sel,
- ~ f+ z4 `& x% ? new FArgumentsImpl (this, sel)));8 R4 o2 ^! Q. x4 ~( i
} catch (Exception e) {
! J9 U$ A# _4 I" z e.printStackTrace (System.err);
/ x; w2 I( O, {; p" Z }
) [1 r/ { g; r: @ " D5 R& |% ]1 d# n- v
syncUpdateOrder ();( r9 e7 Z+ z% y. Y b$ L! t
! A% D4 j2 Z2 l
try {/ r; L8 ]* b" P' Y1 ]
modelActions.createActionTo$message
+ ^! j |, ~& Y$ y5 R. w (heat, new Selector (heat.getClass (), "updateLattice", false));
2 A) j& {/ y: {+ e5 Y# Y6 i } catch (Exception e) {- W* W G: z* f* l s. U
System.err.println("Exception updateLattice: " + e.getMessage ());% {! z% q V$ O' d4 G' Q8 N
}- S1 W- e: y3 a) `1 p7 v
/ R1 i/ ]' K2 q
// Then we create a schedule that executes the
* j: m6 r6 Y0 t // modelActions. modelActions is an ActionGroup, by itself it1 q1 H& L/ C* h. a
// has no notion of time. In order to have it executed in
4 Q. v) B1 Z( P. ? // time, we create a Schedule that says to use the5 D1 }' g, d7 V
// modelActions ActionGroup at particular times. This2 A: {" w# Y! s4 ?3 s
// schedule has a repeat interval of 1, it will loop every
: n1 E+ v$ J5 f: l // time step. The action is executed at time 0 relative to
1 F0 q3 l! ~2 |) t // the beginning of the loop.0 M! t- q } J
- J4 Y$ `- U1 h" `& n4 U! V3 ?
// This is a simple schedule, with only one action that is/ K9 r3 E. Q0 ~% `9 m8 }0 w
// just repeated every time. See jmousetrap for more
6 A5 m6 G) t+ |* D, a5 ~% f // complicated schedules.9 \6 B5 _) U0 Q5 h" ]% z9 p5 i
' V$ G; g5 F! { n! s: G g modelSchedule = new ScheduleImpl (getZone (), 1);
$ t) R3 z6 K4 ]2 o7 U5 R8 A modelSchedule.at$createAction (0, modelActions);- k9 N+ V' Z d6 J8 D
3 o1 I& p4 x! N' }6 c return this;+ z$ \9 x: B( T3 I- d1 P# G( U
} |