HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 ^! Y4 [! D: b
$ Y# z" d/ o* E" X& T+ {# o+ A5 N public Object buildActions () {" D3 K* n) C: W+ K4 c3 o
super.buildActions();) C- p& D; Z' [' b: U% T
% [- L3 ]$ k; Q0 R& p" e
// Create the list of simulation actions. We put these in3 R$ \" U4 Z0 u( H+ l$ [
// an action group, because we want these actions to be
z7 H' [" p6 s3 }& f/ d // executed in a specific order, but these steps should' J3 H# l' U1 C
// take no (simulated) time. The M(foo) means "The message6 K) e/ u: r: ^; ]4 ~% O* S
// called <foo>". You can send a message To a particular9 f* W8 `; k \
// object, or ForEach object in a collection.5 k# F% y& F7 a" e6 Q: c
9 l C. T& h1 i; o
// Note we update the heatspace in two phases: first run
7 a {0 U2 J4 w( Q6 V( F; q // diffusion, then run "updateWorld" to actually enact the
& x. t h7 t+ z# d7 h! L1 c7 e5 w, k // changes the heatbugs have made. The ordering here is s2 L/ D) D$ G/ B
// significant!% q3 a2 l( a9 ]/ C6 a
" d8 a1 B9 C5 |1 _: |% N" i# Z; W
// Note also, that with the additional4 E& I$ @8 U$ Z# l( {# `' q
// `randomizeHeatbugUpdateOrder' Boolean flag we can* p( h. l! n6 d
// randomize the order in which the bugs actually run' v3 D3 [& X& x
// their step rule. This has the effect of removing any
2 D( J3 ^. `# m, M9 _6 d5 v0 k3 h# w // systematic bias in the iteration throught the heatbug: W* ^6 J" t. h( T8 d: `
// list from timestep to timestep, ?" ]- X3 m) J+ ]' o# q) r
5 h. w' q- ~% |( Y
// By default, all `createActionForEach' modelActions have. J6 H2 f4 h: G6 C+ Y1 g4 z
// a default order of `Sequential', which means that the1 u' h h5 A8 C8 H0 h7 ]+ Z! p
// order of iteration through the `heatbugList' will be
3 ]" [( l$ |; b$ ^ // identical (assuming the list order is not changed0 L5 M% t2 ]5 J! L6 m7 E
// indirectly by some other process).' E; t5 s3 f9 {, ~; v5 O& t
4 e9 R9 B4 R0 J; J5 e/ { modelActions = new ActionGroupImpl (getZone ());
0 R/ b1 w2 x% u! L
5 h- w8 }! S. U* @) z- h& n& @ try {
0 O# M0 s0 w# o9 a6 M% F- t3 Y6 D modelActions.createActionTo$message
: W% y; d! Y( _) ]$ w- Y (heat, new Selector (heat.getClass (), "stepRule", false));
% T0 i8 _1 M; b# P$ } } catch (Exception e) {" r2 `( u* k; e6 ]
System.err.println ("Exception stepRule: " + e.getMessage ());- ^ `- O9 s+ ?$ M6 c) ]
}
; e+ O$ C1 ?- a3 X4 B( l
$ {! P b4 `) q! k0 J: V8 _ try {
7 R; J# ~0 f4 S Heatbug proto = (Heatbug) heatbugList.get (0);4 z9 K0 P( X% B
Selector sel =
+ q) r4 E5 f k( z8 E! E) G new Selector (proto.getClass (), "heatbugStep", false);- H7 s% M8 [2 X6 z& |7 \
actionForEach =& l6 W+ e& _4 W, i: r9 n
modelActions.createFActionForEachHomogeneous$call2 T4 f3 a7 d7 M% ^% d
(heatbugList,, B' K7 g5 ?. W" F
new FCallImpl (this, proto, sel,& L) e- s( G" v# {8 L7 A
new FArgumentsImpl (this, sel)));# N! q) }* M& U3 ^1 J
} catch (Exception e) {; {0 C5 D# l0 @$ D% l. i' h
e.printStackTrace (System.err);, M% T5 q3 ]7 ?. b" E0 X8 R# ?( b0 z {
}
2 h; ~$ G l+ k* T# }5 P. r
' l5 P& U0 _9 W5 F; p h syncUpdateOrder ();
' X# {# M% P7 S. Y9 M& e/ R2 |5 l6 ]2 K# ?" J9 i
try {: P0 |# V T. B: Z& ~( u; G( m
modelActions.createActionTo$message
, C* X1 }1 y5 [, n: d3 W# ? (heat, new Selector (heat.getClass (), "updateLattice", false));4 q4 A% C# s5 h; k, ?+ @& J
} catch (Exception e) {
7 P" i* W! z% l7 I System.err.println("Exception updateLattice: " + e.getMessage ());
7 v+ y5 K4 {8 t& S; r }
1 |7 m. _2 E- ^# G* r# W; B+ f
3 d% e; g1 V( B( K8 e% l // Then we create a schedule that executes the0 P0 l7 \7 k1 Q1 o5 V5 [" Y/ w. s1 B
// modelActions. modelActions is an ActionGroup, by itself it
5 B6 ~- M& ] K5 o4 v // has no notion of time. In order to have it executed in" i7 f0 D1 @( c7 w. Z# _) Y
// time, we create a Schedule that says to use the
$ ?" N& W8 |8 A4 e, Z/ y- [ // modelActions ActionGroup at particular times. This1 k$ w2 B! W% V U# ]; J1 z! P$ f
// schedule has a repeat interval of 1, it will loop every
5 b/ p7 d7 n* a+ o" }2 [ // time step. The action is executed at time 0 relative to
5 ]4 ~; s+ G; C6 ?4 U // the beginning of the loop.7 x0 [/ d! Y {& z8 a" O: ]
8 |0 f3 s V; |' W // This is a simple schedule, with only one action that is! w- @ j8 J. B' K8 Z$ `# g/ E
// just repeated every time. See jmousetrap for more
" }$ \9 e M& l. ? // complicated schedules.' C0 A! |4 k1 H0 v4 b+ z) p% ~3 R- E
" [& @4 _) S% K0 J
modelSchedule = new ScheduleImpl (getZone (), 1);' `) ?0 G1 q8 z" M6 {) M4 _8 i5 n
modelSchedule.at$createAction (0, modelActions);
; @' |( C9 T1 f9 Z: N( d : {' G9 w$ N( R- | O8 h
return this; m9 [% L& Y+ D
} |