HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% h- m/ c; ^; F5 p" I$ x# E/ |) v1 l6 }: v! e+ m
public Object buildActions () {
v8 A( f6 H7 b, |# `" r% V$ ~6 n super.buildActions();
+ i" ]1 y+ j; O/ J( B4 @
( u5 M! Y" ] k. {6 [1 l // Create the list of simulation actions. We put these in, a$ F l* o, z% k( X/ C& |6 ?% Z/ H
// an action group, because we want these actions to be2 `- I7 E8 p! U
// executed in a specific order, but these steps should
) m c9 A t, Y. A2 p6 M // take no (simulated) time. The M(foo) means "The message
6 [5 w1 u* T" f' {; ^7 W+ V% ~ // called <foo>". You can send a message To a particular
( c7 ~. d) f) n: f // object, or ForEach object in a collection.3 V7 [7 R9 F. ^9 j* I
2 B+ s% {0 b8 [" A: E. S
// Note we update the heatspace in two phases: first run, D u. w, n8 d4 M- g6 o
// diffusion, then run "updateWorld" to actually enact the
6 ^! Q: j# W* u; X' l // changes the heatbugs have made. The ordering here is3 @% U" K: B; R# }
// significant!1 E4 a. Q" c2 y# B: L; {* G
: L$ o6 Y1 q+ l' j/ X
// Note also, that with the additional6 ^) p5 d2 R0 g& t" I; e6 D2 i
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' k7 } j, {. R6 x // randomize the order in which the bugs actually run
% A* k+ B7 J5 R s // their step rule. This has the effect of removing any
2 [7 R2 V t* {' k9 N r7 l8 ~ // systematic bias in the iteration throught the heatbug
" E t. H+ J+ ^9 p/ e/ q // list from timestep to timestep
% T/ D$ v: J6 t1 C
+ V5 Q: l6 D# ~# t // By default, all `createActionForEach' modelActions have
9 K) w8 |" k8 }- \8 S // a default order of `Sequential', which means that the* @8 s/ E+ D$ q4 {7 Q. H4 }
// order of iteration through the `heatbugList' will be) ^/ g- j' C" f- }
// identical (assuming the list order is not changed) ]1 ^$ B5 E9 ]7 i* A8 V! @7 Q
// indirectly by some other process).- |7 y) R/ Z" \7 h8 I% V
7 M+ i3 ~6 |, d. x9 i modelActions = new ActionGroupImpl (getZone ());
' N: Q0 u* t3 V$ @: @% n+ E0 l/ X2 g0 `/ \ I
try {- x( L% {% R% G9 x- p1 A
modelActions.createActionTo$message4 Y& b9 P( f* e/ f0 d3 B- H" S% O
(heat, new Selector (heat.getClass (), "stepRule", false));2 I$ d0 c+ N" X& j. M
} catch (Exception e) {
( W, e3 d2 [: g. w& j' \# S- n System.err.println ("Exception stepRule: " + e.getMessage ());
1 B1 Q! j& e0 C! B3 D }; ^' k& v* ~8 G5 I# u1 `/ d0 q
. {; f3 H* F) X3 _/ w# k. W
try {
' m6 h7 I8 j5 J- `: R1 F Heatbug proto = (Heatbug) heatbugList.get (0);
; k6 Q3 `9 ?3 b& J Selector sel =
# V; Y5 G& D. Y% E8 z) f; P new Selector (proto.getClass (), "heatbugStep", false);' u2 I8 q: G e L) Z
actionForEach =
c9 F% ~; I* D' T modelActions.createFActionForEachHomogeneous$call
9 J; P' A% f- R2 s) J' T (heatbugList,
! \: ?: t9 A& q+ B T# W y new FCallImpl (this, proto, sel, V2 I9 R) w' y5 {1 e4 o
new FArgumentsImpl (this, sel)));
- U2 j* e* a/ q8 L) K/ U) S } catch (Exception e) {7 V) r3 b* c/ h2 B; D
e.printStackTrace (System.err);
- ` Q1 g4 ~8 `$ o6 v }
+ C( X% E( n2 X $ y' d r. V1 U$ c# ?$ p$ H3 |
syncUpdateOrder ();5 z8 x( H4 d- L8 ^4 h& c! A
! l" `0 R/ I3 S6 \; W
try {
4 i5 l. A1 K- w) m6 \, B modelActions.createActionTo$message 0 F6 }5 z4 T, V3 Z& k
(heat, new Selector (heat.getClass (), "updateLattice", false));( W0 A3 f. e# k/ V
} catch (Exception e) {( r4 c! {, a! A
System.err.println("Exception updateLattice: " + e.getMessage ());' D7 X, S3 U" _9 u$ z5 q1 [
}
5 W. } @6 _# Z' w, ~6 H0 c. p ! u u! I8 f+ _6 W4 e
// Then we create a schedule that executes the" q. V( \3 v V/ h& d
// modelActions. modelActions is an ActionGroup, by itself it# n- @2 V( J9 r/ ~+ v$ X
// has no notion of time. In order to have it executed in$ y W b5 X5 j8 F' `( O
// time, we create a Schedule that says to use the; U% Q, W2 b% V( j4 H0 T3 g
// modelActions ActionGroup at particular times. This4 ?) x3 V a% l- ?
// schedule has a repeat interval of 1, it will loop every2 d/ r/ F! O) X( ~) G
// time step. The action is executed at time 0 relative to/ j# V5 G2 v* j4 W' G! K
// the beginning of the loop.; C7 C2 t1 R- W% Y
* C! l9 b, a& I, t) S5 m1 Q6 ~ // This is a simple schedule, with only one action that is
' }: y. s' v. W! ^1 L) [ // just repeated every time. See jmousetrap for more
: h1 B2 a6 B: y5 o1 r // complicated schedules.) a. m, v9 P5 m7 n8 Y1 h" Y/ V
, {. v2 E1 {; q0 {6 ~' x
modelSchedule = new ScheduleImpl (getZone (), 1);
; |; _$ P* U/ K9 m3 u" _0 d+ @ modelSchedule.at$createAction (0, modelActions);
4 ~+ [- t7 y0 ]- ~6 S: E& U7 u
* f/ F& Y' A& @; u" p return this;
8 B2 V6 W3 c$ Q3 q7 v) ~) q2 B1 Z } |