HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ o m, M: n$ y( b! `2 x6 P. o2 R2 c. ^+ v9 H2 D T3 z" i7 X
public Object buildActions () {
# l6 ~ t" k, P super.buildActions();% p. M) }5 j% m5 ]( x
; m" u9 D( p$ h
// Create the list of simulation actions. We put these in9 S$ V5 U5 J5 b" W. P& `
// an action group, because we want these actions to be, C6 [" i! K5 U5 M4 F& m0 V
// executed in a specific order, but these steps should# o/ b2 s% Y, q) Z7 U/ x+ s
// take no (simulated) time. The M(foo) means "The message+ n q4 C' X) a9 u' o
// called <foo>". You can send a message To a particular% B# s, g7 y. E6 l3 ]
// object, or ForEach object in a collection.
7 p6 z+ h* H. H& U8 J; H
* U" s d7 H4 d) b // Note we update the heatspace in two phases: first run
! B/ ^) R3 i3 \) k% d& V# C // diffusion, then run "updateWorld" to actually enact the
7 \- c/ z% L6 X6 S K6 P // changes the heatbugs have made. The ordering here is
% A7 {- m" {& {* W8 v1 Z // significant!
Q; T+ G p# T: O2 ?! }- }. R
0 s% `3 a- D: A( r3 Q" n" O9 x' A // Note also, that with the additional
: q2 X& B- L* ~, n. k // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 v3 ^) D* [& l* c8 Y9 B n. y5 w // randomize the order in which the bugs actually run
) Y& _( b9 C/ b) l" L' q // their step rule. This has the effect of removing any
2 E1 {, |% b) b) Z: i1 Y9 S& S2 F // systematic bias in the iteration throught the heatbug
/ d! l" F# l8 d // list from timestep to timestep4 `0 J6 m, J! s
6 r9 {; p0 g) e // By default, all `createActionForEach' modelActions have$ O8 l, w3 V/ w S* m& w! S
// a default order of `Sequential', which means that the3 j9 @5 r, u$ s0 A
// order of iteration through the `heatbugList' will be% p& P4 x: o* T& p; U/ R6 H$ @
// identical (assuming the list order is not changed) D3 u* I5 V0 o% V
// indirectly by some other process).. \$ ~) o. f$ H* W# ~+ W: q2 ^2 B
/ @( G; c6 l6 n2 o& {7 P0 `- @5 E modelActions = new ActionGroupImpl (getZone ());
8 h+ Q( `1 R/ j) n1 \! Y/ a* ?- x& S
try {
j+ A/ J) X& O modelActions.createActionTo$message' D6 l2 j$ }1 H
(heat, new Selector (heat.getClass (), "stepRule", false));; z. T1 E+ l1 Z) ]" d
} catch (Exception e) {) G& A8 I1 }+ _/ I: u
System.err.println ("Exception stepRule: " + e.getMessage ());* B$ E4 y4 Z* ~3 I' ~4 k4 d6 ]
}6 B6 _# O9 T7 b/ V
! N6 j! w% O9 g: [: E try { u. b# H) E7 V# i+ f/ P, B$ U
Heatbug proto = (Heatbug) heatbugList.get (0);
% q' O4 O) Q) p o* ~% L Selector sel =
* M& B: A0 r4 w3 L+ O( c3 s. e new Selector (proto.getClass (), "heatbugStep", false);, t8 c/ O( L% K! n9 \
actionForEach =
+ z, J" u% u4 P% ~ modelActions.createFActionForEachHomogeneous$call( P( k$ x b# `8 B# Q3 N4 v" e* z0 y
(heatbugList,
' v2 R# @! t0 Q; l2 b4 Y9 e* C% v new FCallImpl (this, proto, sel,: g) e# g/ v' X: L
new FArgumentsImpl (this, sel)));
c2 `& A0 w3 A1 n9 m } catch (Exception e) {
1 I, ]( Z+ A, F! G& U e.printStackTrace (System.err);) P8 y( a" m# k i/ ]
}) \2 ^ W+ n# B2 ?$ d7 c( z
5 K% H! y L9 A" w$ g# ? syncUpdateOrder ();
0 d3 r5 w: z. X, O% e& z X( M" J& H9 I" N! Q
try {
* G% w, a: \! q: I' V' U: I% S modelActions.createActionTo$message
$ x- Q1 `: U9 _2 G4 {4 W* N (heat, new Selector (heat.getClass (), "updateLattice", false));
) h; g1 B/ U. w' ` d! ~, |0 F0 F } catch (Exception e) {& K8 x/ j3 h& \$ U7 n4 k
System.err.println("Exception updateLattice: " + e.getMessage ());
8 n* s+ }7 N9 `( K7 v3 f }7 Y q% P) O, d% x/ i
, i3 I8 v* \: H& [. P // Then we create a schedule that executes the: w6 o4 N+ _5 w, _: Z6 c
// modelActions. modelActions is an ActionGroup, by itself it. i4 t0 ?! v# p+ }' ]& s5 d
// has no notion of time. In order to have it executed in
9 q# _: x5 N* I* { // time, we create a Schedule that says to use the$ T; d" p( }) |. P5 A
// modelActions ActionGroup at particular times. This$ h+ n" Y( Q/ m+ z0 M) o+ E
// schedule has a repeat interval of 1, it will loop every
" O; H" K: s5 X, _4 Y // time step. The action is executed at time 0 relative to* d" T( z1 x5 r- C$ U
// the beginning of the loop.2 ]) K' ]: O3 K, H. n
2 `5 R% L/ H. ]1 Y1 N
// This is a simple schedule, with only one action that is
1 s) [7 {2 G0 T4 ]) h) P, ~( M a R // just repeated every time. See jmousetrap for more( ]/ I, f$ f" E2 e
// complicated schedules.' n5 n- L, U5 R* g( z
) u, r7 v0 t% R( k modelSchedule = new ScheduleImpl (getZone (), 1);
4 a# d( C2 d4 |5 B. M& \ modelSchedule.at$createAction (0, modelActions);
7 E4 [6 l$ ]& W/ i, v % |2 X' ~$ B1 `7 U8 e+ w) l+ r8 l1 i
return this;
* f$ J4 b* L$ g* H } |