HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 v' _$ M" |: `; u0 f. \1 j+ t" \% K) e3 a- z
public Object buildActions () {
# g2 m+ r( S2 t1 F super.buildActions();
: ~9 Y: k4 D* q
; @0 `: g; R* @0 {: j* e // Create the list of simulation actions. We put these in8 E4 J* I! Y1 F$ d N* ^2 c3 V
// an action group, because we want these actions to be" e! \6 V5 e% K* Z6 Y9 u( E
// executed in a specific order, but these steps should% v* [8 |+ f4 K& B4 P
// take no (simulated) time. The M(foo) means "The message1 |, C. ]9 m. Z* j9 {/ y) J
// called <foo>". You can send a message To a particular- b) x: ?/ U) o# v% z7 t7 J
// object, or ForEach object in a collection.
* p3 ~7 o! h4 `9 [ : I7 j' F. J; s5 U9 R9 R9 X1 d8 @
// Note we update the heatspace in two phases: first run
^- g, e' W( B0 E+ y // diffusion, then run "updateWorld" to actually enact the* v" Q7 N- ~4 N5 J
// changes the heatbugs have made. The ordering here is
2 O, G" P# ]" e" J8 K // significant!+ N2 j2 O5 m% G: ?3 u+ f, Y
( d2 U: Y9 h( o5 n2 | // Note also, that with the additional
+ _) j N2 R8 F3 D- l( s2 J2 w // `randomizeHeatbugUpdateOrder' Boolean flag we can- ^4 J1 M# v. f3 Z
// randomize the order in which the bugs actually run& k) [0 _: j; j+ t7 B1 W4 ]- D
// their step rule. This has the effect of removing any
. o7 b+ c5 J3 S; b7 l" ^) N' X' k // systematic bias in the iteration throught the heatbug* I. k1 H( z0 r( a4 J. K- d4 L
// list from timestep to timestep
" _7 B$ C7 U! C% n: q. D
6 ?0 ?, |& i6 v // By default, all `createActionForEach' modelActions have
- L- M! h4 ?% [3 Z. ^4 o9 F3 y: V // a default order of `Sequential', which means that the
2 r3 W4 }- d9 p# ]4 k // order of iteration through the `heatbugList' will be# D5 Z% H) Z" s! i) X
// identical (assuming the list order is not changed
) t( Y2 H% j+ h9 K0 F# `/ O$ O5 y // indirectly by some other process).
8 v/ c! W3 [. c' R& @
% o f( u- N" l modelActions = new ActionGroupImpl (getZone ());$ `+ L' C. Q* D8 o4 {/ H
. o/ @; d) t. k% @ try {
4 A7 ^# e: \6 ]8 i# i, F modelActions.createActionTo$message
) f/ N6 Y/ g. `& J4 V (heat, new Selector (heat.getClass (), "stepRule", false));8 L" {% b& |- g: T. K1 V& g4 U
} catch (Exception e) { C4 D# j. r4 M4 S
System.err.println ("Exception stepRule: " + e.getMessage ());+ K* X: U' k! H# q; l: l3 _1 e
}8 d! I' t6 h7 h/ _% N+ y; N
. h9 a1 ~% g9 @, D, {# x4 F try {( v5 z5 Z$ i- y5 H& b( W$ h
Heatbug proto = (Heatbug) heatbugList.get (0);9 l0 B# F7 `$ u( T* R, b; @
Selector sel = 2 X# c+ C7 I! Y7 W! R
new Selector (proto.getClass (), "heatbugStep", false);
# U R* m2 U7 j7 o( l6 D actionForEach =
+ w0 ?0 C8 \0 R4 g% Q modelActions.createFActionForEachHomogeneous$call
/ T& h! j. h$ w. K. g) c (heatbugList,4 R/ q' G a* J0 [& q0 u& z. s* V
new FCallImpl (this, proto, sel,4 e1 o7 O( U% A( E/ l. j: p
new FArgumentsImpl (this, sel)));
6 s; [3 q( F4 G! p } catch (Exception e) {0 m" a7 F0 s3 w9 {6 K
e.printStackTrace (System.err);$ @. L+ ^! \5 R/ E G
}
) p2 g% o; m( B$ M 4 p# t0 {4 |" v
syncUpdateOrder ();3 o1 ^2 M' c i8 A
% e, P& h+ x3 ?# B, u, @
try {" a& Q& z" ^; F! {% Z
modelActions.createActionTo$message 2 O+ J6 N8 @+ i
(heat, new Selector (heat.getClass (), "updateLattice", false));) u+ o5 Y2 p& M& y4 A+ v
} catch (Exception e) {
4 N* {: D. ]6 c1 q System.err.println("Exception updateLattice: " + e.getMessage ());
! u* R( B3 U0 y. y }
! ~+ L8 C: r# c3 m # w% p3 L' C4 }) _5 u2 j
// Then we create a schedule that executes the
! W' B6 z/ |* H+ ?. e // modelActions. modelActions is an ActionGroup, by itself it4 s" C8 n G' o7 P8 c$ z: {
// has no notion of time. In order to have it executed in1 Z2 E" B4 }! e
// time, we create a Schedule that says to use the5 S2 L& t! P( W% _
// modelActions ActionGroup at particular times. This) E4 P- X; u0 ^- r9 B* g! [
// schedule has a repeat interval of 1, it will loop every z$ X5 O* F: m. T/ @- Y
// time step. The action is executed at time 0 relative to
% v7 S, {5 ?' c# U // the beginning of the loop.
. l+ k6 \+ ?- a" U
& _& ^- B" k& H H- d! G // This is a simple schedule, with only one action that is
. U! j# m) v {8 V // just repeated every time. See jmousetrap for more
9 l1 I6 J+ m# S, B# W+ ], L! Q // complicated schedules.
& G0 y! F3 N- s 9 l, } W1 l( U
modelSchedule = new ScheduleImpl (getZone (), 1);
5 s6 W3 f) N& s" s modelSchedule.at$createAction (0, modelActions);" ?4 A" i5 w, W/ M! V) p4 o0 o3 W
- Q, F- A" ]+ E0 ~/ _
return this;
6 E" f) r3 v+ @$ t4 D } |