HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: M0 ^- J5 B; [
% x. }7 ] m; p! m
public Object buildActions () {
; R3 i: m& A1 A$ {. H super.buildActions();* ^9 U7 N! r; V: h* [8 m
0 Y1 A$ ^: g7 d9 L6 i: X: h
// Create the list of simulation actions. We put these in
* L/ q8 T/ m, B) B8 w // an action group, because we want these actions to be7 M. O- \( a! l# C- R2 F9 n- g
// executed in a specific order, but these steps should
& X' j1 x! o* s9 Z. P // take no (simulated) time. The M(foo) means "The message
8 A6 d# k- Q; t // called <foo>". You can send a message To a particular3 N N% O9 b" t: G' W% }
// object, or ForEach object in a collection.
1 B) f' U5 s) M l! A9 T. C2 `) O
( p o( c% I, I* Q' n2 a0 M; q6 i: F // Note we update the heatspace in two phases: first run
, R: L* D$ H; t: t // diffusion, then run "updateWorld" to actually enact the# V3 j7 Q% _* j7 T
// changes the heatbugs have made. The ordering here is; m- s4 e" F2 j- R! ?1 W4 s
// significant!
; J* V1 V/ [! Z! b2 e! L % P" R; \' w6 V; [( O# A
// Note also, that with the additional
" I9 u! Y! ]$ a- V/ J // `randomizeHeatbugUpdateOrder' Boolean flag we can {# T H2 u: \( [3 n5 M
// randomize the order in which the bugs actually run
5 G* K( d0 \# r! g {8 D- G' S // their step rule. This has the effect of removing any: Y- Y- y, G( t' t/ |% Z
// systematic bias in the iteration throught the heatbug) O( e# P% _" v; R1 G
// list from timestep to timestep
, k' o& h9 ]) h% l) P8 p" h ( N2 R1 Y. d" f9 z* S" T, L
// By default, all `createActionForEach' modelActions have9 F, Y' }# ]* }
// a default order of `Sequential', which means that the+ D4 X7 I8 N9 W e, C
// order of iteration through the `heatbugList' will be
+ F$ t$ k' Q0 L$ u // identical (assuming the list order is not changed
: ], D- T3 y7 U2 m // indirectly by some other process).
$ _9 s# T: ^! _, P. }* ?( Z & }) [* P G1 N, h
modelActions = new ActionGroupImpl (getZone ());% v9 U# Q0 J& _0 I
4 q! y' m+ J6 Q" l3 n. p
try {4 U+ V+ x9 J3 K0 G5 S6 h
modelActions.createActionTo$message
2 E* z( u6 I) P0 S# i (heat, new Selector (heat.getClass (), "stepRule", false));9 [; F" K1 Y. b0 R; W$ N; z
} catch (Exception e) {
5 ]8 X0 K8 r+ \# u4 T( [ System.err.println ("Exception stepRule: " + e.getMessage ());
, S( U" z5 D0 X; }' n6 a d$ z# j. L }, } }( Z& b. f% j; f- X6 z
( n( x; }9 `* i2 F8 V6 d try {
1 [6 u' O1 Z% S, X0 O Heatbug proto = (Heatbug) heatbugList.get (0); f$ S5 G1 x; j- i; l3 m7 s
Selector sel =
3 O! J: p! M9 }4 o new Selector (proto.getClass (), "heatbugStep", false);
/ e+ |2 }: ?3 z3 `( f& Y* y# t actionForEach =/ b0 ?; L, `! U, d( I% ^$ a7 C5 c
modelActions.createFActionForEachHomogeneous$call
3 Q- G0 u- n* R& x2 g1 _ (heatbugList,) T8 i$ |/ x9 g$ V
new FCallImpl (this, proto, sel,
1 Y% r% a/ s: n3 a1 P K/ B7 u }8 J new FArgumentsImpl (this, sel)));
/ [. g1 D" f6 X" _. e: @ } catch (Exception e) {8 C) a9 b" r! w9 d
e.printStackTrace (System.err);% m- \; p$ y+ Y2 B
}6 `* S2 e/ k. z/ \
7 f) l* p/ Z$ g2 a9 r. O$ {* H' I) ? syncUpdateOrder ();" L2 O7 H0 E' O$ \& @8 A2 o
1 S+ l* g* Q w8 y# n try {
/ x& Y& {2 x0 s- V$ f modelActions.createActionTo$message
5 S# O' s3 @" ?. F" d% k (heat, new Selector (heat.getClass (), "updateLattice", false));
6 R0 S8 D' u1 j } catch (Exception e) {
1 ^; d: k+ L# ?0 m# o5 H System.err.println("Exception updateLattice: " + e.getMessage ());# ?$ G$ I4 B; N; m; {2 U
}
6 v& ]. R8 _/ P3 ^3 Q* O2 D" b
5 T( K6 ^# a+ `( e8 o // Then we create a schedule that executes the. c ^5 n3 g9 u8 H
// modelActions. modelActions is an ActionGroup, by itself it: l" C9 O' ^! U2 j6 J& G; b2 H
// has no notion of time. In order to have it executed in
- K1 a& X/ o/ [# R( z# R // time, we create a Schedule that says to use the' J! C4 b" b `* g1 t
// modelActions ActionGroup at particular times. This
7 l% e' N8 D5 q2 } // schedule has a repeat interval of 1, it will loop every! v `. l) w: K
// time step. The action is executed at time 0 relative to5 o' s; N5 Q$ L: n9 u
// the beginning of the loop.6 W; [+ u9 ~0 s% g! \0 g7 }, Q
' X- s* s" d; A // This is a simple schedule, with only one action that is
; ]+ l9 C) C0 Q8 c/ C // just repeated every time. See jmousetrap for more& Q6 E) T7 s1 i+ j9 d8 |2 F
// complicated schedules.
" _$ [( L) @0 G! r0 M' u; M8 J7 t. c ! s/ j# _- ], {, W/ W/ Q
modelSchedule = new ScheduleImpl (getZone (), 1);% J9 @5 X/ W7 Z# i9 @- n& s u3 T
modelSchedule.at$createAction (0, modelActions);7 p0 s- d# n* D# W6 n$ ^
L! M c5 ]5 Q$ ^' S
return this;
2 ~+ _ i, G! t } |