HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 P- d) u9 a9 a' W% w* @
+ v& L: `5 [& z T public Object buildActions () {/ H( x* R+ {0 y# Y( Y3 ?
super.buildActions();/ v! L D! F. ?" P8 n
) h0 V u4 H- g) R4 ~ // Create the list of simulation actions. We put these in( S3 g! [9 l+ n- X0 V( n
// an action group, because we want these actions to be
0 T* Z+ h4 l; [4 g7 U( y // executed in a specific order, but these steps should8 I' u# q9 P. I/ {8 D6 y) W
// take no (simulated) time. The M(foo) means "The message
) Z0 u) J c, h! T5 j8 y // called <foo>". You can send a message To a particular! P, A: K. W+ W, I5 n# b6 D( s
// object, or ForEach object in a collection.
$ ^. F3 e+ W6 R- `2 K) P / H* o6 z8 G5 [9 n( `
// Note we update the heatspace in two phases: first run
' ?. q/ ]5 B" K/ [7 ]: [1 Y( J // diffusion, then run "updateWorld" to actually enact the
1 J: Q; l: ]2 L* b // changes the heatbugs have made. The ordering here is# Q) c, F$ T7 G& G
// significant!3 \5 Z) `1 z/ c( T; T
1 {! R; L2 L( y/ x- c' q- x // Note also, that with the additional& y* N G$ b% y7 \7 G$ a
// `randomizeHeatbugUpdateOrder' Boolean flag we can
9 s: G4 L/ I/ N* {# X* Y6 q2 ? // randomize the order in which the bugs actually run
( a6 D1 Y8 Z8 p; x. \/ }, E // their step rule. This has the effect of removing any
+ ] }3 l e$ l1 G- j // systematic bias in the iteration throught the heatbug
# K! b' \& D' Z/ D* w+ I // list from timestep to timestep
/ v( k# k! ?* i* I/ X h
9 u; @8 {% ?$ h& h+ E. T // By default, all `createActionForEach' modelActions have
4 D! b' G7 ]# B: j5 a // a default order of `Sequential', which means that the
# |, ?' k {6 }, f- } // order of iteration through the `heatbugList' will be
% b% ]. A9 F1 E* O // identical (assuming the list order is not changed
3 K1 W$ q8 Q- K3 V4 ]& Y/ O) s // indirectly by some other process).
1 \* V% X2 e4 | 8 R9 C, @0 ~2 C' e( R1 G) H( o& S
modelActions = new ActionGroupImpl (getZone ());; R0 e+ n; \! U% N
( K2 l2 W3 a b7 w+ ? try {4 G- T2 q' \( K4 [0 N5 T
modelActions.createActionTo$message
- j* V( b) A6 H$ R1 n: C (heat, new Selector (heat.getClass (), "stepRule", false));
0 i; L9 K3 F, V3 s' Y1 ~ } catch (Exception e) {2 A. t( R1 t4 g7 T& `$ a* E7 i p9 y
System.err.println ("Exception stepRule: " + e.getMessage ());3 ?/ J5 N% k+ \, j2 J, j& V6 o
}& i) X% C7 S5 r8 B* [
& K6 i% A& Y* l6 V% C: b8 u" D# ?& R try {
" z1 s6 ]/ y, V" g8 Z+ _ Heatbug proto = (Heatbug) heatbugList.get (0);
# ]7 A2 p* u2 q- D Selector sel = % g' V: l0 |. k' z
new Selector (proto.getClass (), "heatbugStep", false);
6 h0 I- T8 b, g* t, l actionForEach =0 W$ J) O7 X, `2 x: Y' F j: S. ^
modelActions.createFActionForEachHomogeneous$call
G& N3 Q/ {# k* j9 W (heatbugList,1 G/ h. P3 r% N# y& A% s+ f
new FCallImpl (this, proto, sel,4 L9 Z7 _5 n% H
new FArgumentsImpl (this, sel)));
* g$ a# w( n ]: P+ g2 a% h, @ } catch (Exception e) {
- a$ K8 D8 G, Z e.printStackTrace (System.err);) F1 C/ p# E1 C
}* g& Z( H; E; J% C# ^0 p) `( ~
8 g' ~) Q0 ^# l" J1 J; C9 v1 i( a syncUpdateOrder ();: v7 B3 p6 B9 G( d) J
' V6 V! J9 L" t try {
9 |& Z" k1 ?( R: G modelActions.createActionTo$message 1 @. D3 C( k* s0 U% w
(heat, new Selector (heat.getClass (), "updateLattice", false));6 o6 a2 X0 J W) q- V( q
} catch (Exception e) {
0 d, Y3 M$ [" q* ]/ G, D% q% { System.err.println("Exception updateLattice: " + e.getMessage ());
N/ ]0 Y" @* |7 F1 m! R }
+ W* R2 z" H) D: R! v
* {. g6 i8 C0 O) F" [: I // Then we create a schedule that executes the7 V9 G( n0 {' _. w
// modelActions. modelActions is an ActionGroup, by itself it
0 c& k3 H1 W+ D // has no notion of time. In order to have it executed in+ t3 w6 T" {2 N/ C5 K0 Q6 x
// time, we create a Schedule that says to use the
* U; F( T9 Y$ ^4 K; ` // modelActions ActionGroup at particular times. This% b# e' x5 v, L, B3 k- b
// schedule has a repeat interval of 1, it will loop every$ @. X' E6 W s. U0 y/ P
// time step. The action is executed at time 0 relative to) y1 G# o7 |: v$ Z# P3 }1 n5 a9 w
// the beginning of the loop.
' l5 }1 n4 V" C) e
' W/ u' C, W* c# [8 n% A+ G // This is a simple schedule, with only one action that is! a% _4 W4 M. ^
// just repeated every time. See jmousetrap for more6 U' @- Z: y# {
// complicated schedules.
8 t o) O# ^$ |& E 7 V" p# s3 u7 Y4 A% a
modelSchedule = new ScheduleImpl (getZone (), 1);
7 y" O- t1 S$ Y K# n modelSchedule.at$createAction (0, modelActions);4 P _, N% y" y, `. U
' l, S3 }/ g3 F. o
return this;
0 ~2 y. C# ]6 R$ x' j6 E+ k } |