HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( O3 ~5 s- o/ j' J1 O
' [; D0 V+ q, u& V0 x3 a$ I% I public Object buildActions () {* `$ y; U" [3 W/ K- W0 W
super.buildActions();# @% P0 b4 J/ _; E% D+ V- _
6 Y% f" `& U% [/ X
// Create the list of simulation actions. We put these in Y* O- a+ ?9 }% Z% J
// an action group, because we want these actions to be' l, A2 F% q- S$ |2 R! Z- @9 m
// executed in a specific order, but these steps should
/ G( u6 e$ ?. |; b! Q // take no (simulated) time. The M(foo) means "The message* z1 V6 y/ j" e, x8 q- D
// called <foo>". You can send a message To a particular7 @( [6 I1 D3 A& S* I) |$ z/ Q
// object, or ForEach object in a collection.
3 i. A+ M7 [: K' n7 z0 E" f
1 u' |! a/ w# x( T. N9 u0 ~1 @ // Note we update the heatspace in two phases: first run
1 F$ j P% T' `* G4 y Y! n& V // diffusion, then run "updateWorld" to actually enact the w$ b1 a: v8 O3 f% F4 C9 X
// changes the heatbugs have made. The ordering here is3 A8 ?# v5 N5 ~( F* G+ l3 H
// significant!
& D# H Y# o! h o " J- ^" x: @2 a7 [3 A" J7 j$ X
// Note also, that with the additional
& B5 e/ u# i8 L* D* v // `randomizeHeatbugUpdateOrder' Boolean flag we can: g% k9 E: e: g" J; b: w# j# t
// randomize the order in which the bugs actually run
5 }2 t' H3 u( u0 x. w( s // their step rule. This has the effect of removing any* q" n/ m- y2 r/ ^
// systematic bias in the iteration throught the heatbug
' U3 d( ^( |, U+ ^8 T // list from timestep to timestep
. \) c) D7 y; M% D4 n4 X' x( y 9 z; ~, T6 i* r& o: Z' @+ l% m/ A' @- A
// By default, all `createActionForEach' modelActions have
7 X3 h5 O; Y! A3 M- Q // a default order of `Sequential', which means that the
/ ~3 o) `% X5 l // order of iteration through the `heatbugList' will be
2 A. `4 @* ]! Q7 Q6 i8 E // identical (assuming the list order is not changed
7 O" S4 B' V. d% @ // indirectly by some other process).: [( Z$ V. n ^7 h6 c! H) I' i8 i" M
& X( `4 U% K& m+ [
modelActions = new ActionGroupImpl (getZone ());* R8 a2 I0 B& r: J
3 h! @' V( }8 ?- J* o try {
- c* q% ?" ]+ d4 f) g: [ modelActions.createActionTo$message, o- I6 T6 w4 ]/ O) \
(heat, new Selector (heat.getClass (), "stepRule", false));9 x9 Q" z d# J4 X1 N
} catch (Exception e) {0 t6 h; ^ C$ r
System.err.println ("Exception stepRule: " + e.getMessage ());
7 ]' h. T4 ?- M }% j! v: v1 P! u- V; J: Y
3 K' c7 {4 ^# e* K try {6 J0 p9 g2 f5 p& A3 ?! B
Heatbug proto = (Heatbug) heatbugList.get (0);1 `: f2 x# c* [
Selector sel = 1 ?& b9 K2 n* M# k& }4 a
new Selector (proto.getClass (), "heatbugStep", false);" `% u* c. y9 ~8 Z
actionForEach =8 S1 `* g) F+ y, P( t2 R- n
modelActions.createFActionForEachHomogeneous$call# _0 `0 Q- ~0 k7 e; b) ~# ^
(heatbugList,
`* h5 u# Q1 b& a new FCallImpl (this, proto, sel, _/ T8 E9 v' Y) p9 @: i) O$ l' ]! D9 p
new FArgumentsImpl (this, sel)));
% b% ]: s6 J6 D } catch (Exception e) {: U6 u; t. F3 y2 V/ n
e.printStackTrace (System.err);
8 D: w( e; a3 @8 P }
/ e% r2 Q. \# q! Y4 b
! l" N( `: G; W# w syncUpdateOrder ();( e& D3 c9 u1 h
; _5 j) ?" i+ h: Y% r3 y
try {
9 v+ l' z5 l- k4 _* J modelActions.createActionTo$message
9 m w2 U6 S k' h# S (heat, new Selector (heat.getClass (), "updateLattice", false));, D: V% h% t+ y% g, I/ `
} catch (Exception e) {
0 y2 |9 w' g9 v1 K& T/ x System.err.println("Exception updateLattice: " + e.getMessage ());1 `% O3 k5 S) a# Q. g
}- m% o, ]% ]+ y2 Z7 ^
6 j& g1 p) g( c) N. K# M
// Then we create a schedule that executes the0 J1 y+ I9 h- m* d0 }
// modelActions. modelActions is an ActionGroup, by itself it
% W8 u6 T+ E; Z // has no notion of time. In order to have it executed in" O+ F$ d. V3 \8 e0 y
// time, we create a Schedule that says to use the5 b& W8 z. |; O8 q$ Z! W, ]( [
// modelActions ActionGroup at particular times. This5 j, P: O, e4 J4 u
// schedule has a repeat interval of 1, it will loop every' N& }& [! t# }/ d1 d, x3 @
// time step. The action is executed at time 0 relative to. ?$ b- K& {) L" E2 ?7 B
// the beginning of the loop.& { o3 s8 T5 Z2 ?
) v! l9 R) \& {- _
// This is a simple schedule, with only one action that is% F! q6 m( {4 c7 J; U+ F9 R2 {( ~, D" X
// just repeated every time. See jmousetrap for more
2 |( N/ D. Z* E7 m, R // complicated schedules.8 o1 _5 P" C' S
& P6 |! |8 H; T! b modelSchedule = new ScheduleImpl (getZone (), 1);( C! }+ v! _) T) \
modelSchedule.at$createAction (0, modelActions);
1 v& W1 Q) F& v2 b3 z
. M7 g6 M1 Y& ?7 l* q8 k- \ return this;' y* k y, g0 D6 p0 Y. y
} |