HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 o2 X* _8 A+ z D5 p+ S2 {% C# `
' G5 w# N) P! q public Object buildActions () {! y/ ]# }+ f8 S: o, E; l
super.buildActions();- q9 n) |, m6 j# _
: b5 @ X: E4 _+ w+ G1 d2 T5 W/ P // Create the list of simulation actions. We put these in7 ~0 T8 a: J/ c# g( r r `3 ]
// an action group, because we want these actions to be
3 @, z y$ j. S6 w* M // executed in a specific order, but these steps should
/ ]% G' P) F5 V+ [ d( Z4 g // take no (simulated) time. The M(foo) means "The message' [7 |4 T( n$ F. T
// called <foo>". You can send a message To a particular
1 t) l3 \7 d+ g* d& t // object, or ForEach object in a collection.
' A4 D/ o% i# B& ^
% n& `' q, ^1 o9 @) C' J // Note we update the heatspace in two phases: first run
. m- {( X9 d/ N: O) u7 ~) } // diffusion, then run "updateWorld" to actually enact the
0 H) ?$ |( U& t/ G // changes the heatbugs have made. The ordering here is' ~* q8 L; H" V: G
// significant!
# T1 _* W. m5 U$ i: h
' Q# {) ~6 H% b& J; \ // Note also, that with the additional2 d4 i. O$ x) _
// `randomizeHeatbugUpdateOrder' Boolean flag we can) \2 X" }! c1 C8 d& C6 x
// randomize the order in which the bugs actually run1 Z- N5 t9 M' h, R; m
// their step rule. This has the effect of removing any
) Q2 ]" c) G# H // systematic bias in the iteration throught the heatbug
! K# p( t, _5 \3 Y# ^+ V* I // list from timestep to timestep4 W7 }0 V+ x5 w3 R
+ M) y- D6 i& M5 X! \. L, p* r; [ C
// By default, all `createActionForEach' modelActions have
/ a; ^0 ~4 k: r8 P5 O# } // a default order of `Sequential', which means that the
" t8 h, ]( Z1 f9 k$ s3 \6 I // order of iteration through the `heatbugList' will be
* J! v1 O$ R" z // identical (assuming the list order is not changed0 ~& y/ v) Y, Y. I( n
// indirectly by some other process).
7 C) g8 D3 B+ }/ J& O1 t2 D
3 {7 U/ d9 S8 N+ O& U modelActions = new ActionGroupImpl (getZone ());) U4 [2 |6 h; {' ^6 ~
' b+ j! V$ E) {3 d; D try {- [5 ]) [: X) E2 h$ W
modelActions.createActionTo$message
+ l7 Z$ }6 \% T4 F! C (heat, new Selector (heat.getClass (), "stepRule", false));
1 J* e. i( ^- r1 N } catch (Exception e) {! V5 h" J0 s4 ?7 P2 N
System.err.println ("Exception stepRule: " + e.getMessage ());# a2 Z4 s% M, P7 n
}
- o' v- F3 m D9 b; p7 M+ y$ D4 E% T0 K" D5 @7 N7 G/ e2 x4 n
try {, C& ] V+ W. o2 T) {" G& }: O
Heatbug proto = (Heatbug) heatbugList.get (0);) b6 \4 n4 o: y$ s+ \- R
Selector sel =
6 c8 Q# ~% \: ? new Selector (proto.getClass (), "heatbugStep", false);
3 H# s" E0 n* f6 g# D+ s* ^ actionForEach =
8 ?' u6 y( b& u7 M8 q" y% s modelActions.createFActionForEachHomogeneous$call
/ ]# r' \. S% U) H- h) M8 Q (heatbugList,
) B+ F( X. O6 U, ] new FCallImpl (this, proto, sel,% ~* F$ e, o D: D4 P
new FArgumentsImpl (this, sel)));' o) h9 O ~& @( ~0 x7 c o% b
} catch (Exception e) {
$ @+ }3 R6 y+ y; @ e.printStackTrace (System.err);
9 b3 S) ~# j4 |+ b' v T }
) ?: Y: L6 a, X4 `% ^
- t3 P; ^: B( G6 x: J4 n& l1 I syncUpdateOrder ();* u; _7 c0 N# _! F' J3 e
0 z8 T: x3 N' a/ V% x: ~. \3 [
try {6 T/ e, g# W) Z% h1 i
modelActions.createActionTo$message
* J. D' e9 z6 T8 I (heat, new Selector (heat.getClass (), "updateLattice", false));
6 |' m$ x+ I8 R9 f. B } catch (Exception e) {
' J. s4 R& n9 L- E System.err.println("Exception updateLattice: " + e.getMessage ());
) f% Y0 m6 D' O/ B; ]) U) H d }
: [8 W! k/ e$ d2 Q! C8 n7 f
& M" ?& ?3 `5 t6 J: i/ M: R // Then we create a schedule that executes the" t9 T- T9 d) R& u9 R" f
// modelActions. modelActions is an ActionGroup, by itself it. T7 ?* n6 }! Y/ n
// has no notion of time. In order to have it executed in( l7 J ?- R5 \, ]* G& G
// time, we create a Schedule that says to use the
3 e) B5 {' V2 M0 ?+ o // modelActions ActionGroup at particular times. This
/ E+ |" T v- y) j6 Z // schedule has a repeat interval of 1, it will loop every% q- K0 x$ f! ~& M
// time step. The action is executed at time 0 relative to
* C0 H) M0 ]# g8 c$ z // the beginning of the loop.0 c% Y( N4 c+ h3 y4 G" v) n
& G9 @3 U( `3 m& V. F- ? // This is a simple schedule, with only one action that is) L5 H2 y& i* l2 A! e& T8 c( ~% p
// just repeated every time. See jmousetrap for more: a. C7 A4 I* E0 E; T7 |
// complicated schedules.3 l# g2 |5 k' o4 \5 U
9 u5 j8 o+ V# B0 U" i4 r modelSchedule = new ScheduleImpl (getZone (), 1);% i- V" ]( ], e' d6 a
modelSchedule.at$createAction (0, modelActions);
, f- v. w+ L3 Z- i5 {6 d3 n5 T2 X 8 g. d, y) q$ a+ B4 D* W3 K/ y
return this;. z( ~# }$ g5 F. ]9 p
} |