HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! C/ e3 d0 x, [. x
$ R, y; U8 K" `& o* F. j public Object buildActions () {
0 ]8 V. u, R: i' r4 h super.buildActions();& t9 d" Y$ P* k4 A& f4 ^
! R5 W- {: s D% Q
// Create the list of simulation actions. We put these in
& ^: L" o# k- f) J5 v, t. o0 ` // an action group, because we want these actions to be
% S' w* C7 D" V, g/ \1 W // executed in a specific order, but these steps should' m( R: T6 ]* v/ _8 A/ a1 s
// take no (simulated) time. The M(foo) means "The message# X1 M# j( ^5 f; q/ S
// called <foo>". You can send a message To a particular
# U; ]9 U7 w; {2 n+ f- d9 v // object, or ForEach object in a collection.
! q5 x8 M1 Z( {8 B, F( B 7 I4 D8 Z' ^0 f4 K2 _! i
// Note we update the heatspace in two phases: first run' T% ]4 g7 {" @" {, [
// diffusion, then run "updateWorld" to actually enact the2 c2 o- i P: J m( F% t9 b+ y
// changes the heatbugs have made. The ordering here is, \( |8 p2 E* y$ ^
// significant!# s }9 u! [& N/ G N* D6 ~1 D" s
9 Z$ Q' H3 h: @! J
// Note also, that with the additional' N2 A2 X& ~1 ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 X4 N% H; N7 _" O
// randomize the order in which the bugs actually run
; v6 f8 t* A, a% s9 a // their step rule. This has the effect of removing any
& A) r y+ F! ]( X/ |9 z // systematic bias in the iteration throught the heatbug$ r$ B, O7 `- F, [
// list from timestep to timestep e7 ~9 m! t: t( ~, D
. q$ b: e5 b/ S( N
// By default, all `createActionForEach' modelActions have
1 F5 J C$ U) T8 p" O // a default order of `Sequential', which means that the
$ M9 K) N- q/ L1 a% W6 N4 H% i // order of iteration through the `heatbugList' will be
' W% v' K# a# w3 R8 S4 m; ?$ e( [4 Z // identical (assuming the list order is not changed
$ w; t" z3 k4 n `* G. B+ i' x0 { // indirectly by some other process).
, a7 `. T+ d F: U, I: T* J
0 T3 h) N9 l( {, y0 X3 e modelActions = new ActionGroupImpl (getZone ());2 X" Y" I6 Y8 z" Y M
7 ~( M: O- Z( D/ R! A3 C; U1 L try {7 `0 }5 r" o$ i( n' V1 g
modelActions.createActionTo$message: V# v' O ]% S4 U, i; h3 g. }
(heat, new Selector (heat.getClass (), "stepRule", false));1 {& I3 l9 p* w1 |; a7 U# {
} catch (Exception e) {( I+ S" c# j3 O- Z
System.err.println ("Exception stepRule: " + e.getMessage ());1 {- D( ~( Y7 K9 D4 u& T
}
* J) W5 }/ R; k7 ?5 G& A2 [5 W" b7 u5 J5 O( R5 {1 M; ]
try {
0 J8 S% X1 |( ~) Q% m5 S% L Heatbug proto = (Heatbug) heatbugList.get (0);. a- C( T3 }6 T1 E) E0 {
Selector sel = ) D2 f4 }- ]9 _( G
new Selector (proto.getClass (), "heatbugStep", false);
/ O o \5 C# e( ~ actionForEach =
8 l2 p3 B# U# ^" a( _ modelActions.createFActionForEachHomogeneous$call# G) _, \* D4 H+ p* g h
(heatbugList,
, M2 a! r0 C4 R0 e new FCallImpl (this, proto, sel,: |( B6 \) B6 o1 ^" ~6 U9 F+ s4 G! H
new FArgumentsImpl (this, sel)));
) b3 ^) ^2 G. U, _4 t } catch (Exception e) {$ D3 `6 y q- z7 b# x" m
e.printStackTrace (System.err);: r$ a" y+ n5 |: [! L+ S
}! ]6 |9 b8 K. V5 m5 Y/ m" |0 T
7 i2 \7 Y& z7 J. {0 t syncUpdateOrder ();( X8 z6 u+ k* g3 ~9 ]) ?
( o9 p( z3 X8 \ s F o* N- s
try {
/ s( E+ l% F& x modelActions.createActionTo$message . Y- Z! v; V. L4 L% [
(heat, new Selector (heat.getClass (), "updateLattice", false));
8 ]$ S2 @0 o1 c } catch (Exception e) {
0 k2 z* K2 ?) u/ d; i9 q" ]1 E System.err.println("Exception updateLattice: " + e.getMessage ());( C2 `' q* e6 k' R! Q8 [4 m. x+ C
}
9 Q4 \4 L1 f8 W' Y7 P7 z
' W4 ~% E7 i% q. k/ N: a7 j) w9 } // Then we create a schedule that executes the1 p# x$ d G4 R. u
// modelActions. modelActions is an ActionGroup, by itself it* _3 I( j9 \7 _& E5 m: k
// has no notion of time. In order to have it executed in
3 m: A+ G; z8 w/ ^0 Z // time, we create a Schedule that says to use the
# f/ L ?# q# @% u // modelActions ActionGroup at particular times. This
& A( J& e* g' q6 e8 V. T# n. E% v // schedule has a repeat interval of 1, it will loop every& W/ x0 O9 K% q/ i
// time step. The action is executed at time 0 relative to, {: J0 q6 Y2 n( ^2 {3 P6 G. _
// the beginning of the loop.- j* j- C5 k5 X2 v' ?$ V
8 x8 V/ \2 W0 x, b! B$ V9 E
// This is a simple schedule, with only one action that is
8 X& y7 {) I4 Q+ S // just repeated every time. See jmousetrap for more8 ]7 |; M, ^- ]3 y1 N2 V* N! k
// complicated schedules.: k8 n$ K# W2 F# Z+ C0 D
' F9 s% q' q9 o" R3 u9 l( E' j
modelSchedule = new ScheduleImpl (getZone (), 1);9 A2 w v8 a1 C& @
modelSchedule.at$createAction (0, modelActions);' J0 i8 Y0 H# ], _: X
& Q( G4 n& |" o& W x7 Y J return this;
0 Y2 a1 U. I3 B: { m } |