HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% u$ M5 u' X! V9 J
' I1 C" t) b' x1 d0 m8 {
public Object buildActions () {5 [* I# S, _! y6 F* F* J7 @
super.buildActions();
3 T+ x+ @! y4 c0 W# j
$ w$ z+ @8 H8 H: [1 }/ d // Create the list of simulation actions. We put these in
2 r* O8 F5 y" |; C' A // an action group, because we want these actions to be
! J: u0 J7 T, l // executed in a specific order, but these steps should2 J$ N% Y5 Q2 S9 ^
// take no (simulated) time. The M(foo) means "The message; F: e; ]' u5 p/ q W/ M7 t$ M+ r
// called <foo>". You can send a message To a particular
, G" R8 I, {# Z8 t1 a // object, or ForEach object in a collection.( v- _, {- \; c1 \0 k
6 Y3 S! ^$ X+ j: N2 T // Note we update the heatspace in two phases: first run
; z8 O ?& V2 D1 H, h' F // diffusion, then run "updateWorld" to actually enact the/ P3 k4 i4 m9 P. D6 L
// changes the heatbugs have made. The ordering here is
9 S- Y0 s3 e4 f" G: D // significant!1 i" [" V3 b5 {6 m# L* b& Z
' E5 A: Z6 E5 o6 P L$ \$ \/ [
// Note also, that with the additional
' S* k3 P: P e9 p" I3 S // `randomizeHeatbugUpdateOrder' Boolean flag we can, B6 l3 m6 Y9 V5 O, ]8 R! a0 R& F
// randomize the order in which the bugs actually run. S- j0 Z# {8 [) W
// their step rule. This has the effect of removing any
3 _$ h) u" k) b9 r2 H2 m // systematic bias in the iteration throught the heatbug
9 E, h2 ^( G% ?: u0 p, [ // list from timestep to timestep
! s- ~8 M% A, ]7 L
5 H; G ^" @, p9 B' D5 A$ r // By default, all `createActionForEach' modelActions have
5 v4 I* w9 a8 a# V5 ]" k! z3 g: r // a default order of `Sequential', which means that the
1 [$ g4 p8 U/ V2 A% L/ X. x& o // order of iteration through the `heatbugList' will be" Z" |8 |0 C8 i+ S
// identical (assuming the list order is not changed( s- k! B: r( c
// indirectly by some other process).% s6 j# ~- R7 R* C5 L
6 [3 B% x+ ?: V2 ~1 u7 }
modelActions = new ActionGroupImpl (getZone ());
& W0 ~% x6 U" f6 W* w! B$ _& \2 |# F; E+ t
try {
" E1 |* C+ m6 x7 S& q! }& y/ n modelActions.createActionTo$message* e* e& V. S( b$ f6 |3 n, z
(heat, new Selector (heat.getClass (), "stepRule", false));3 E& s. n* @5 a' u2 u3 q$ q
} catch (Exception e) {# U6 K& l) D# @, G Z1 z0 T
System.err.println ("Exception stepRule: " + e.getMessage ());
: r5 I b, n( k6 Y% E9 z6 i$ K8 s. E4 N }
; S0 a" l- z4 J" A. H. Y+ e4 [5 r/ v% m" V
try {- Q/ n+ Y. l7 |1 _0 `; a" `
Heatbug proto = (Heatbug) heatbugList.get (0);
. Q: K& [% P& Y+ v3 z Selector sel =
) [9 E1 X* J: e* C& I, y, u' @ new Selector (proto.getClass (), "heatbugStep", false);
# I1 q. g: @" {1 ]3 d5 X5 G actionForEach =+ a6 q3 s1 ]: F' b t) w3 p; D$ J0 ]
modelActions.createFActionForEachHomogeneous$call) g* s9 t. \3 G4 K
(heatbugList,. Q) E- d) W5 U8 ^! Z! T. B
new FCallImpl (this, proto, sel,
: R! R8 q, Q' b) e4 c9 l* B new FArgumentsImpl (this, sel)));/ x9 a! U' d" w8 M
} catch (Exception e) {) j, U, A, A) e
e.printStackTrace (System.err);
5 d4 [: K' R5 M+ M. w# m& j; S0 Q }0 T8 ~- m& Q" F$ U$ q6 O: Y
% y5 O+ o$ ^# C+ [
syncUpdateOrder ();
; d; ]7 K2 S6 l7 T0 l6 i9 H2 |) d% a" [/ g! H; s, P
try {
, `+ ~$ a! O% u modelActions.createActionTo$message - B' W% E+ P1 _8 r
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 s; T2 I6 ^- Z' `; J F* U } catch (Exception e) {* ?5 O2 ~4 y) K
System.err.println("Exception updateLattice: " + e.getMessage ());2 h. W& ?0 T8 r1 F! k! o
}! G; g2 h8 s: ^; y8 z
% T: F- T. F: ^9 [( w# o0 ^
// Then we create a schedule that executes the
' k: A% n/ ?( `6 u1 V' { // modelActions. modelActions is an ActionGroup, by itself it% |& p# l8 j& q1 P9 w9 j
// has no notion of time. In order to have it executed in
* g3 z- \5 b* r# r$ a8 J5 Z // time, we create a Schedule that says to use the1 u' e% v4 K+ }# D2 M
// modelActions ActionGroup at particular times. This
6 l' [2 f8 [3 m/ o4 m" R: Q // schedule has a repeat interval of 1, it will loop every
* O8 k: ^ z9 y+ F$ Q N* A6 p$ n+ l // time step. The action is executed at time 0 relative to+ p6 m! d7 A' h8 N% a+ P& ^
// the beginning of the loop.) O* w7 P+ [' W4 \: J7 z
2 \; P# a( L! N/ e% k% V* P. I
// This is a simple schedule, with only one action that is
. s4 V! G% x6 @/ v2 s% h) N // just repeated every time. See jmousetrap for more
$ V$ K( w, u& i1 y5 s // complicated schedules.3 F. ~/ i" n F$ d
/ _/ n! O9 h: m+ G8 e% K+ K modelSchedule = new ScheduleImpl (getZone (), 1);
7 O# B! a5 {" Y) q modelSchedule.at$createAction (0, modelActions);
& Q8 I% j$ y% H- Z2 w* E' e r& ?, `6 P: L- r; b, ]
return this;
4 ` u% C- h9 T2 L: _0 Z C% O4 } } |