HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 y; _* N& E1 o. |
+ s( j! |! N1 x5 }$ ]
public Object buildActions () {
7 \7 D' R. D& t super.buildActions();# y2 H0 A7 U/ [) o$ m) }" \( ^: L5 C
7 A! S; T+ ]1 U+ [
// Create the list of simulation actions. We put these in
, B7 W: O# `8 S$ Q: ~2 M // an action group, because we want these actions to be5 D1 Y5 s) C* C3 e* E) X9 h
// executed in a specific order, but these steps should
6 M* j) t3 I |6 C# w // take no (simulated) time. The M(foo) means "The message$ i& w! p, X5 `- e6 P6 q2 `
// called <foo>". You can send a message To a particular
( `7 z: M) h$ A // object, or ForEach object in a collection.8 \4 Z7 c9 M* e
" D/ V( x' k% p/ Q/ B2 L
// Note we update the heatspace in two phases: first run
+ O: J( b0 z# m. L6 @1 ~ // diffusion, then run "updateWorld" to actually enact the
- K" L y2 D. b3 f2 f2 ^" v+ g // changes the heatbugs have made. The ordering here is/ p) `5 _' o1 {4 ^1 ~1 r
// significant!
, K5 h) e+ o6 k/ N $ y( @, b. U3 |" n! d# C0 d* Y4 o8 ~' d
// Note also, that with the additional
: J2 c8 |" O! U3 c. p // `randomizeHeatbugUpdateOrder' Boolean flag we can! m3 s2 H6 v. b' o/ g# S
// randomize the order in which the bugs actually run
9 x% S) b+ D. X, T9 J // their step rule. This has the effect of removing any
8 u* Z4 U. K$ T4 a' y( u // systematic bias in the iteration throught the heatbug
) T3 w2 I6 s# T& y7 j // list from timestep to timestep
, I7 ]$ M* ]. r, q1 ~; J9 T% R; }- V 0 [! [5 _7 m2 V! ?, t' \* P
// By default, all `createActionForEach' modelActions have
( L& _4 |( u& Z: w5 h3 L. p // a default order of `Sequential', which means that the; @- i2 c4 y# @3 X! c2 `
// order of iteration through the `heatbugList' will be
1 n! k1 D% z' ?9 R7 B# t/ m& C& ^ // identical (assuming the list order is not changed. \- e; G4 B( y
// indirectly by some other process).3 i% o- n, `6 Q- }
& v. G- w3 Y7 O
modelActions = new ActionGroupImpl (getZone ());
' }) A% l" D' j5 n @6 c" F
7 Z; }0 B0 d5 y2 b( i$ t try {
! U3 X1 n- s* f/ [8 C% W8 o" Q6 p modelActions.createActionTo$message
5 Z1 ]$ X! ^$ n- \ } (heat, new Selector (heat.getClass (), "stepRule", false));! H: i7 d9 \( A" z5 i
} catch (Exception e) {$ r9 n7 E, ]! O, x' o; U; ` B
System.err.println ("Exception stepRule: " + e.getMessage ());$ ^4 m/ d. @! ?9 `% b& l+ M b
}- q' g; H, g7 O7 J$ v5 m: y1 A! H
1 x6 S. [; ], E. m9 k
try {
; M! b L& Q/ |; z$ o L Heatbug proto = (Heatbug) heatbugList.get (0);" @3 y' l2 c. E! A! I! Q
Selector sel = 6 a {3 a& _+ _' v' x
new Selector (proto.getClass (), "heatbugStep", false);) L1 v1 O6 D; Y. U8 v1 [
actionForEach = h! u! h& }* O
modelActions.createFActionForEachHomogeneous$call
1 `" X4 S! f/ z# l7 P/ g3 q* L (heatbugList,
( B# K! p% _- m0 q) b9 ]/ P) Z U new FCallImpl (this, proto, sel,# i. j/ d! g7 r: s* A0 m# C6 m
new FArgumentsImpl (this, sel)));: A+ ]5 o0 m5 F
} catch (Exception e) {8 A/ i8 u, f% r; h) O+ @; i2 t
e.printStackTrace (System.err);1 a( K; s8 e. d
}4 N8 ^3 V, ^) `/ S* A" P
9 i u6 ?# T3 m& {" v* {
syncUpdateOrder ();
" q; M& }; M) N+ W' {6 p' F% j- N7 K8 N# S
try {
: g& w7 o% p6 v3 c0 q modelActions.createActionTo$message
8 f G6 P* w3 U7 t (heat, new Selector (heat.getClass (), "updateLattice", false));
% G+ e+ ?( _, y } catch (Exception e) {. [# y9 ?+ l0 S7 T; h& V
System.err.println("Exception updateLattice: " + e.getMessage ());
- Z T& x5 Q7 ?! a% R }
9 [( \5 A; E% N4 Q q9 Z( q, A1 A 9 p8 S7 a1 P$ d# c1 \8 V' O4 t6 Y
// Then we create a schedule that executes the8 X, L; n& P5 G- ^
// modelActions. modelActions is an ActionGroup, by itself it& v8 Z! m( J: v$ r- y0 o+ C
// has no notion of time. In order to have it executed in
m8 q1 t5 e" |7 n- [ y4 F // time, we create a Schedule that says to use the
' @. q+ d: G2 I // modelActions ActionGroup at particular times. This Y( n" A& B+ x P y! v
// schedule has a repeat interval of 1, it will loop every2 \) D; x# T7 w4 D9 ?) F
// time step. The action is executed at time 0 relative to, b, o" |% `5 I+ S+ ~( Y
// the beginning of the loop.3 i, Z) R `) o6 N4 Z! Y* E$ v/ k% c
! c) @- t0 _7 l) u; F( p5 l
// This is a simple schedule, with only one action that is
! V6 C6 P% ^: L6 |( g# Q8 I' @ // just repeated every time. See jmousetrap for more
6 W$ s6 c, S4 _ ? // complicated schedules.
3 v. i9 E4 z1 ?( r
5 H3 W! ?& w& H0 N- J$ h0 Q modelSchedule = new ScheduleImpl (getZone (), 1);: F* `% O4 j6 |9 K: C
modelSchedule.at$createAction (0, modelActions);0 z2 d. g! ]; u7 B0 {0 K9 A
' u$ t- u% q L7 j! _( z return this;; V3 g6 U& k" d
} |