HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 }* {2 m) a3 v2 M5 _. |
! c. [# z4 L# X! v1 f2 V7 v3 w public Object buildActions () {7 v; r; M+ v3 S ^" Y
super.buildActions();
- x: x2 b# W8 `1 q1 r/ R# e- w4 ?
$ ?9 \! }( [3 } J* a8 a u- Q // Create the list of simulation actions. We put these in
& Y( q4 Y: I0 J6 c. _) S$ s7 Z // an action group, because we want these actions to be# W! Q/ a2 Y6 g3 S8 n+ g1 c; O3 S1 _2 O
// executed in a specific order, but these steps should
' ]- x8 s1 d6 {. s# i8 ~; E // take no (simulated) time. The M(foo) means "The message4 e- b1 ^6 Q$ D2 T" |
// called <foo>". You can send a message To a particular0 ]7 v! @& q+ s6 J- B
// object, or ForEach object in a collection.
}7 {6 A" V" H) X
$ y' [1 d! U7 k: u // Note we update the heatspace in two phases: first run
! Z6 a+ E c* [7 ]- _7 v: H // diffusion, then run "updateWorld" to actually enact the
3 J, g7 x, [; k% ` // changes the heatbugs have made. The ordering here is; |$ j2 M' H% s5 ~/ T# w- f S
// significant!
" a+ b( ?. W9 J$ t L $ e3 m) B% K X2 C0 m) f( C
// Note also, that with the additional
) o5 u1 J9 Y# k) L! u$ Y! m // `randomizeHeatbugUpdateOrder' Boolean flag we can
" s4 ^; U' m; }5 p. G! Z! Q // randomize the order in which the bugs actually run% d$ o. p f4 N
// their step rule. This has the effect of removing any
! D2 w I0 Z4 D( H. d+ d& k // systematic bias in the iteration throught the heatbug8 {, Q6 ]* ~, r" h/ U
// list from timestep to timestep
H0 y* f. f7 M( v2 h. E- ~$ E ) u# C4 w [8 C- _, G
// By default, all `createActionForEach' modelActions have
4 Q w6 W! B N3 A // a default order of `Sequential', which means that the9 W% [8 w: R" y. R+ n- ~
// order of iteration through the `heatbugList' will be8 J/ ~# |5 C) ?$ O1 G- F
// identical (assuming the list order is not changed
3 n$ V2 _5 H* f9 L* N // indirectly by some other process).
0 _. I' l! S( K 0 d/ k. t+ r* c) ]( b
modelActions = new ActionGroupImpl (getZone ());
5 K. S% R, U$ ]* Y
) N3 h$ D5 j; x5 h6 [ try {
% ?+ R/ x# {, w8 J! E8 Z modelActions.createActionTo$message: z# {& O5 p; q! C3 {
(heat, new Selector (heat.getClass (), "stepRule", false));
/ y( M: G. {9 X, S7 N } catch (Exception e) {" U; P& {; k/ K* z; T9 Z
System.err.println ("Exception stepRule: " + e.getMessage ());
, N# G& R4 \4 t) k }0 |$ w% ~, a9 ~: X. Q
/ J5 l$ a& _% e1 q ]7 M
try {
; m* R: e b i; |) e Heatbug proto = (Heatbug) heatbugList.get (0);
& C# {1 C+ k+ i3 ` Selector sel =
$ t- f8 i# z- d4 W new Selector (proto.getClass (), "heatbugStep", false);
- ~3 q2 t) G3 ` actionForEach =( N$ y9 }1 O7 i! X3 o
modelActions.createFActionForEachHomogeneous$call
- p0 K5 J! h* M9 l9 M (heatbugList,4 D4 K$ I9 E4 g% Q8 ~
new FCallImpl (this, proto, sel,
g# N: Y# S' m0 w& a Y new FArgumentsImpl (this, sel)));" B _7 F' S; S& `! [9 B
} catch (Exception e) {
4 V6 z4 L, D1 F8 P# j1 j: h# g6 Q e.printStackTrace (System.err);9 G# E6 v! q- ~. K
}3 L6 _5 S# a) ?
$ G' Q/ }# o0 u7 B! Z- C5 i# n7 P
syncUpdateOrder ();2 S9 d8 A2 Z" D( B% M* [ ^/ X! t
& ?! X% M) N+ X: z! t, E' C0 x
try {7 L9 ~+ }3 O% Y7 X
modelActions.createActionTo$message + D, D1 W o8 @* D$ o
(heat, new Selector (heat.getClass (), "updateLattice", false));2 @5 I" G; ]. x e% B6 I
} catch (Exception e) {) ~: M0 E% u6 b. v+ E
System.err.println("Exception updateLattice: " + e.getMessage ());, e3 H0 f% ] g! j" i
}
5 @0 }* ^& M3 a- F( H% V. H1 D
: Q3 m; v E' q" B0 t // Then we create a schedule that executes the
8 l K( R: r% e: C3 W // modelActions. modelActions is an ActionGroup, by itself it
+ r9 f" F4 L( h M* D) t+ |7 U // has no notion of time. In order to have it executed in
& w. D9 i3 V1 ~ F7 W) t+ _, ^( L // time, we create a Schedule that says to use the
* G( P1 b3 d: c // modelActions ActionGroup at particular times. This
* e0 ?0 g1 a1 A [ // schedule has a repeat interval of 1, it will loop every
5 B. j& n1 z: J4 D3 n Y2 w // time step. The action is executed at time 0 relative to
, A* p0 B7 S& i' J, r2 `0 D [/ b7 N // the beginning of the loop.+ a K3 w( N( q5 n9 C
$ J" z, u" Z% s& o+ c' D
// This is a simple schedule, with only one action that is
; R2 |0 Y# u! B2 q. q! Y' { // just repeated every time. See jmousetrap for more" b, Q& { I" V- U6 @
// complicated schedules.
7 j3 L. ^2 J9 h T. a2 c% _& ~% x0 Y
! |' r: |- B' l8 l; \' N" w' \3 ^ modelSchedule = new ScheduleImpl (getZone (), 1);1 V+ d+ ?/ ?: C/ h6 f
modelSchedule.at$createAction (0, modelActions);. [+ L. {+ f0 J7 J0 u! g9 n
: ]% }3 i5 N5 K( c( e) g, j return this;1 R) M8 u( o0 i. F" a0 D
} |