HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# ^% a$ C( H! `; K) S5 V
j, w: l+ ^; E+ |9 }
public Object buildActions () {
2 f! x9 f% J7 }4 _ super.buildActions();
! W6 s+ K# F" k, b2 m0 E - M7 ~+ }# x2 c5 Y. s
// Create the list of simulation actions. We put these in' E" E% T& \0 r2 F
// an action group, because we want these actions to be/ R. M. n+ U6 `5 k* p9 |+ s6 B% ^- R
// executed in a specific order, but these steps should
! w0 Q. A! n# c/ \% r! L // take no (simulated) time. The M(foo) means "The message
* q! y2 v/ u/ {' B1 p3 H) _1 @ // called <foo>". You can send a message To a particular
& e5 f7 X* ?$ ?& I7 p! o' y ^ // object, or ForEach object in a collection.
" J6 V& b; K- `+ ` 1 X: z+ i d0 _) c0 w
// Note we update the heatspace in two phases: first run
y, K& ~. \/ b+ `+ D' q // diffusion, then run "updateWorld" to actually enact the
0 _7 e) Y5 j- }# _7 }9 Y C6 A( u# s // changes the heatbugs have made. The ordering here is3 F1 a- }$ m) S; C. y) v
// significant!0 \9 b& S& G4 J D" {8 G6 W
; S! |6 ]: R! d) _7 _8 B // Note also, that with the additional
; \; _8 \( L% _+ y1 U7 O1 a7 ^ // `randomizeHeatbugUpdateOrder' Boolean flag we can
( Q4 W" d3 T( a! I // randomize the order in which the bugs actually run! c2 T: s% `. Y
// their step rule. This has the effect of removing any/ F4 l8 B% w j% j0 K
// systematic bias in the iteration throught the heatbug
" V `+ X# B- O6 Q$ e1 ?+ Y- N // list from timestep to timestep; R0 b" f% ^/ G+ P& K7 c
! G/ _# E, S3 e6 _1 m8 V" ?4 n8 B // By default, all `createActionForEach' modelActions have/ N+ f" W( ]0 I$ L* A
// a default order of `Sequential', which means that the3 r, c7 @7 ^% c9 z P
// order of iteration through the `heatbugList' will be
! Q: Z! \, Z( X! D- k! z4 T // identical (assuming the list order is not changed) u2 p' S7 l# p8 ~1 U
// indirectly by some other process).
1 D, U+ d7 {! h; _
/ t# f, T* S7 ~ modelActions = new ActionGroupImpl (getZone ());
% _9 }: z, z5 i, ?8 z; M$ }7 z3 `' {8 r c+ s$ e
try {
; B3 I$ `7 ^/ W4 h+ O" b) S modelActions.createActionTo$message
( C7 F* f: Y& O( W* _( s, Y (heat, new Selector (heat.getClass (), "stepRule", false));
% s! G* s; t0 E( N( j5 C } catch (Exception e) {
8 g6 H: V5 C- [) f/ } System.err.println ("Exception stepRule: " + e.getMessage ());
3 |2 I2 W% N5 A2 H( M) L0 G }' n2 X& _8 @+ I2 E1 A
' [' F9 J# ?; V7 G9 k
try {5 `' q& S! b2 _- x4 f& K
Heatbug proto = (Heatbug) heatbugList.get (0);; O7 H+ q' M2 I- b# l- a7 y1 t
Selector sel = # M* m5 C. F d6 w& [5 y/ O
new Selector (proto.getClass (), "heatbugStep", false);
* R! e R+ d9 a actionForEach =
3 N- K( i. n9 }" j1 E3 V9 n modelActions.createFActionForEachHomogeneous$call2 i) [/ b# k3 n
(heatbugList,1 ^5 j2 \5 X1 Q
new FCallImpl (this, proto, sel,
, ~' J& X' M% q- q new FArgumentsImpl (this, sel)));1 |9 I9 b# x/ W& e% S( w* P; K
} catch (Exception e) {& H0 v* L3 |' t0 W5 E* E* g% R* ?" y
e.printStackTrace (System.err);
2 E: k9 j d. K6 W3 c/ J }
7 x* V* x1 R2 Y9 C3 t3 ^5 v; ?+ e
2 _3 e% d4 |! g% I syncUpdateOrder ();
5 a, v3 C$ B( I1 ~. P
4 q3 G( K+ `! ` q+ }' l try {3 P y& |% X; Y' J# w
modelActions.createActionTo$message
+ G& P% b: q2 p2 F% G9 v) u6 i (heat, new Selector (heat.getClass (), "updateLattice", false));
: G a4 v- M6 j, N( Z- j2 z } catch (Exception e) {
' w. Q6 _) \$ Q+ ? System.err.println("Exception updateLattice: " + e.getMessage ());
6 z) U# H; G, `2 x4 L }
$ r: Z) F' V3 }# q # z/ V% m6 q( S! P2 K
// Then we create a schedule that executes the
G* }3 N; Y8 J( `+ I // modelActions. modelActions is an ActionGroup, by itself it
/ o1 g* A0 J* G& a, v J9 t // has no notion of time. In order to have it executed in
$ B/ E& Y4 g, i* u2 h- u // time, we create a Schedule that says to use the
' m, q! E: i: x4 Q // modelActions ActionGroup at particular times. This. }5 t# E! T3 N; R& n
// schedule has a repeat interval of 1, it will loop every# i2 n! L7 V* ]+ \1 w
// time step. The action is executed at time 0 relative to% ?5 L* x$ O7 p8 X8 W
// the beginning of the loop.
a) N) A( ]4 w
( i, @' c) t2 I& { // This is a simple schedule, with only one action that is
, J4 G/ C) N! Q) u // just repeated every time. See jmousetrap for more
/ J; [8 k8 |9 b // complicated schedules.
) D5 b* I/ R- ]0 m; H 5 |( r. p" b: e+ _* h/ M
modelSchedule = new ScheduleImpl (getZone (), 1);. ]4 s3 v1 n! I$ K* Y
modelSchedule.at$createAction (0, modelActions);
9 e0 ^, h2 F" U6 W F3 V
z5 U4 J e# `' M return this;: u2 _" F9 @- f9 R) h
} |