HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 k! I: S, L3 x9 s* H( ~$ ^0 p; e$ O, ^5 N5 O, v/ b8 {
public Object buildActions () {
6 h: w3 H" [3 n* y super.buildActions(); V) s9 M' B- J9 V
! Z& \9 c# K {3 }3 e* P // Create the list of simulation actions. We put these in
6 ^1 m0 b. H' D // an action group, because we want these actions to be% Z! }2 m+ B6 `1 a( F) w
// executed in a specific order, but these steps should
. j8 S' r. M4 g" P // take no (simulated) time. The M(foo) means "The message
& t3 K3 \1 i% T8 I9 Z# i& p // called <foo>". You can send a message To a particular/ g/ ~4 o+ X6 X/ W; ~
// object, or ForEach object in a collection.
( j$ J# Q* o# V6 i" l. r. x& ` P, m" c9 W% C7 t" n1 p5 E6 D j+ [' y
// Note we update the heatspace in two phases: first run7 Z I0 J) v8 l$ R8 _
// diffusion, then run "updateWorld" to actually enact the
6 n6 K( Z3 \1 m; j6 L // changes the heatbugs have made. The ordering here is
8 y2 E! B5 S9 G1 [ // significant!
- L" Q7 N2 D! w$ Q2 P" l2 q# B & r, ^8 ^# ^* w) t% s% i
// Note also, that with the additional2 K. B9 S, R S$ R4 g2 g
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ z" P9 @& D' g4 W' j4 u1 Y
// randomize the order in which the bugs actually run7 x4 h6 M3 a: w6 J6 O
// their step rule. This has the effect of removing any9 A4 U8 N" E4 f
// systematic bias in the iteration throught the heatbug( j) T2 O; t9 K2 a- r
// list from timestep to timestep8 W" z1 t: y9 ~3 y" L' y
5 n' c+ v; |- o W t; w // By default, all `createActionForEach' modelActions have
/ a4 H3 f# \1 x! ?( ]2 d // a default order of `Sequential', which means that the
$ e( p; X6 I3 B+ x/ V" \ // order of iteration through the `heatbugList' will be3 ?' d2 }+ d7 t! i6 v: l
// identical (assuming the list order is not changed
4 l1 K1 E3 U7 K( y // indirectly by some other process).
6 c2 @9 R8 V+ y. n( }8 |; O
, J. h, T7 [+ x; M0 p, C& r modelActions = new ActionGroupImpl (getZone ());, M, D4 f k3 L' D6 x+ y
% e/ c t' C: Z$ R7 V4 C; A4 n% F
try {/ b& }" l- e- _, K+ m( q
modelActions.createActionTo$message0 |2 w) `/ `8 G% f% s* J# P
(heat, new Selector (heat.getClass (), "stepRule", false));
! H- z: u: P8 k } catch (Exception e) { i) G8 Z6 S4 P! q) o
System.err.println ("Exception stepRule: " + e.getMessage ());1 L( g9 D7 p; [
}9 w- h& [! M( H3 @1 z
3 i. W* Z( h3 q) |) A: @" b
try {
+ O1 J1 Y- M; b. N2 o; v. ~' B Heatbug proto = (Heatbug) heatbugList.get (0);
' C/ Q1 L- B- R# s6 E2 J1 { Selector sel =
& P# o# c+ D. H* v- h new Selector (proto.getClass (), "heatbugStep", false);
9 m* |. V- {0 D actionForEach =
; `* Y/ t3 ]! Z* K. o. o modelActions.createFActionForEachHomogeneous$call% s/ ]1 t5 W& P" V8 ~2 @" b7 j P% g
(heatbugList,
) H. C7 Y7 ^; M8 Y3 ]# M# v: X3 H H new FCallImpl (this, proto, sel,- s2 K$ _+ ~! G& \, J' c& {" l$ ~
new FArgumentsImpl (this, sel)));* Y8 Q) n6 i8 B' ]
} catch (Exception e) {
- z. O$ u# h# l/ O e.printStackTrace (System.err);
, K5 v9 J! |) a' Z$ A6 M" ^" F }
7 { Y6 Z; o9 a( F7 _6 u
- h: @7 w7 M4 r w" C4 b6 H1 W syncUpdateOrder ();
/ g4 @$ H6 x' i* u' F5 k( i5 {
- H# d, _. V' O, I- N5 F try {1 ]2 D1 H# I" O9 Y7 L1 P) a3 v8 D
modelActions.createActionTo$message % Z% l2 q- E0 {1 N0 b0 S# o
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 h* Z: I+ v) }' O" }& a( j } catch (Exception e) {
, m8 o5 S+ @ Q4 c( p y System.err.println("Exception updateLattice: " + e.getMessage ());7 K; G1 `# M+ u% w7 @
}
+ o& J& A( l. d/ h: r. @
( ]$ s. Z) O2 @! l5 [ // Then we create a schedule that executes the
% M( T6 V. T& Y7 `9 x; V // modelActions. modelActions is an ActionGroup, by itself it
: t# b1 F$ ^& R5 n5 H // has no notion of time. In order to have it executed in v3 n7 N: q) \# t+ k+ k
// time, we create a Schedule that says to use the) ?' \3 c1 h) `+ O, M, _1 E
// modelActions ActionGroup at particular times. This0 ~; O" t; S2 Y5 r7 A( u8 Y5 R
// schedule has a repeat interval of 1, it will loop every/ b9 Z3 V! q: i' [* o6 l
// time step. The action is executed at time 0 relative to
) a9 J( _7 D3 b; E3 | // the beginning of the loop.
) G% _$ _% D ^, u
: B1 S+ u/ s/ N // This is a simple schedule, with only one action that is; i2 d( R) x i$ x3 r( r' P1 R
// just repeated every time. See jmousetrap for more8 J& L( v' F% E+ q
// complicated schedules.8 g5 N1 K; ~4 {/ m% P% T! t8 n
+ o; \# P4 U$ j modelSchedule = new ScheduleImpl (getZone (), 1);0 w9 T- j9 R% f( r3 X
modelSchedule.at$createAction (0, modelActions);. B7 U- ?$ r% G7 P2 V
( V t8 J! T3 I* I, l: j' @2 g return this;3 e B, K4 l& t: r& c
} |