HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ q. B8 E) C0 K+ v4 I5 _
( L0 X: R8 G; y5 L6 I public Object buildActions () {
# g5 c$ ]7 i7 v3 Q( h super.buildActions();
$ p9 \0 R: b K4 |3 t/ u 0 Z( {, ~ D& K; Z$ F6 K9 R
// Create the list of simulation actions. We put these in
' b' C, k; S% `% T // an action group, because we want these actions to be6 X1 [$ k3 Q1 o7 }# |
// executed in a specific order, but these steps should
9 `# s0 Y& c6 j# A2 u! `2 u! J // take no (simulated) time. The M(foo) means "The message5 F6 `0 d( |' }1 z4 `
// called <foo>". You can send a message To a particular
# K8 ?6 l5 V" X4 y3 ?2 f6 b# D // object, or ForEach object in a collection./ q$ V4 \ N9 w# |2 k
( a- u+ P) A7 t% m // Note we update the heatspace in two phases: first run# ~1 c* p+ ?% c% t. H/ N
// diffusion, then run "updateWorld" to actually enact the
4 I9 C4 a7 h: S; A' j // changes the heatbugs have made. The ordering here is/ S% ]8 f( D4 q; q0 n& Q- z
// significant!9 K! g7 S, N8 M: k$ P3 K% x* f
% k5 X0 B/ m/ s& \4 O. p // Note also, that with the additional
8 A9 \& w' E) f+ ^. n/ S! T+ K // `randomizeHeatbugUpdateOrder' Boolean flag we can
% K6 n( k* ^) o: ? // randomize the order in which the bugs actually run
0 x8 ~4 J% R3 w, l // their step rule. This has the effect of removing any' u- D) G& x4 K! r/ M3 f+ s
// systematic bias in the iteration throught the heatbug, m( G; ]5 h2 W ^$ d/ [
// list from timestep to timestep: ~0 S% Y# k8 @' F' D' ?
" S' U6 Y8 ?4 m5 X8 Z- q/ \
// By default, all `createActionForEach' modelActions have
4 l+ ]9 e D5 G2 I% C // a default order of `Sequential', which means that the
b) N: c e1 A // order of iteration through the `heatbugList' will be
5 G3 I4 {+ |& o. q9 M // identical (assuming the list order is not changed
% n% `0 b) P) ?5 O# |7 E, \* f // indirectly by some other process).
, t e' c6 Y' X- I( @. s 4 I3 x/ H3 U, J: ?
modelActions = new ActionGroupImpl (getZone ());/ g0 H# n' M; D7 [" x' c
$ r& L4 T# [1 r! K" u
try {0 f& y1 I5 f9 b: i5 h. V, f
modelActions.createActionTo$message6 z- [8 x9 W1 M8 u, t8 S
(heat, new Selector (heat.getClass (), "stepRule", false));
# N8 L$ c: u( i8 c8 C: f } catch (Exception e) {) Q2 Q3 @! W/ E f& u7 D5 i, x
System.err.println ("Exception stepRule: " + e.getMessage ());
. y% h' A8 P' I, K! u* U }
) t; ~$ Z1 g6 p6 Z) F
. H+ s9 P- S B; l3 S try {
5 K, T5 h5 N% [5 c9 V& ^ Heatbug proto = (Heatbug) heatbugList.get (0);
4 R! q5 N% A6 s& f Selector sel =
, G/ w1 n* o, J8 r/ W9 E* G4 b new Selector (proto.getClass (), "heatbugStep", false);
( `3 q% \$ c( p, K actionForEach =! e' |; b A& R6 S6 b
modelActions.createFActionForEachHomogeneous$call8 O/ i N6 j; E3 w _9 F! ^
(heatbugList,& T% q( c( g: F# c( A$ E7 n
new FCallImpl (this, proto, sel,6 P( H! L+ H3 U+ p, p$ g8 U# P
new FArgumentsImpl (this, sel)));8 J8 ~/ q, Q% T' m1 Y% \
} catch (Exception e) {
1 C( z% G, i6 m& O0 a e.printStackTrace (System.err);
' F- X3 @0 R) z/ [2 {& C$ o }
! i5 M6 m5 S: r6 W' a3 l* O2 l ) ?; m0 v* ]# ^( J" L
syncUpdateOrder ();# {; H/ g; o6 F& |" m |! ]
! L. ?( L0 D. C2 p: q4 F; h. ] try {) d6 e) ` p; s7 L7 G1 \7 I+ u
modelActions.createActionTo$message 8 q: I+ P( \5 c- K/ \. X" ?
(heat, new Selector (heat.getClass (), "updateLattice", false));
" H$ K( d: P: t4 U3 B F } catch (Exception e) {
+ u: e+ E: a# |; ?8 g9 m! Z/ J System.err.println("Exception updateLattice: " + e.getMessage ());0 }0 P+ p% L4 j* e5 C, V+ c+ I
}5 q% C# ?+ ?8 _/ x$ _3 {: C8 c
( Q3 \( `- F7 f0 T' A // Then we create a schedule that executes the5 {* T' N# X% G6 B
// modelActions. modelActions is an ActionGroup, by itself it
& D+ `- n6 U8 D# q // has no notion of time. In order to have it executed in
) { |0 i" L3 I5 ^ // time, we create a Schedule that says to use the
8 X; B* l6 j4 y // modelActions ActionGroup at particular times. This, `; W' l5 _7 i: y9 a4 s
// schedule has a repeat interval of 1, it will loop every' H. i, `* O% E) }# T2 R) S- m
// time step. The action is executed at time 0 relative to
6 b( z8 O6 W0 E; D6 ]! N // the beginning of the loop. }8 N5 F0 @0 o1 n% @' E! z5 Q
5 j7 V" `% `& p( ]
// This is a simple schedule, with only one action that is. E4 C( D* ~3 s/ L) }, q3 I
// just repeated every time. See jmousetrap for more
! Y/ c C' [) Y6 v o- T // complicated schedules.5 d) @2 g0 c; P5 n/ \( | |, e6 [
' K8 k4 o! }* B! N. h modelSchedule = new ScheduleImpl (getZone (), 1);9 M; ]/ W- J; n+ v6 o
modelSchedule.at$createAction (0, modelActions);9 b5 L1 B( B4 Z+ a8 N
2 B- a2 F) y; M! A9 |( v$ x9 }' y return this;2 m2 }, j1 n) D- D5 T2 C
} |