HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) o& U" A+ C3 t- Q
7 `' E) H" Q" X1 E1 ~- | public Object buildActions () {
$ a0 G( O; n3 i" e( Z8 ^. l) ~% m super.buildActions();3 B3 x# g! @+ A. P# p! ?; o( h
$ p$ j0 b! s2 L; G3 a. X+ k' H; E // Create the list of simulation actions. We put these in
; x) F! E. _- G+ ~; \5 I // an action group, because we want these actions to be
! S/ B9 `% Y. o5 O5 [6 j4 e // executed in a specific order, but these steps should& F8 }- R& A# X/ R) l
// take no (simulated) time. The M(foo) means "The message
- b! D7 J! K0 h6 c // called <foo>". You can send a message To a particular; Z- D2 a2 _4 X1 b' }( h8 Z9 O
// object, or ForEach object in a collection.
1 w' i3 M9 V& _ ]: ? + L: S, G. A7 s! n
// Note we update the heatspace in two phases: first run
8 O2 g/ c: I5 m5 D( M+ v1 y // diffusion, then run "updateWorld" to actually enact the3 g2 w- a+ E9 \+ O5 w+ B P
// changes the heatbugs have made. The ordering here is0 F$ x+ }$ b' r/ i1 B
// significant!2 j( W6 N( _3 W- d
( V, A2 x' r& z# \8 `3 D
// Note also, that with the additional
5 A6 f1 e- _2 V! A; C; u // `randomizeHeatbugUpdateOrder' Boolean flag we can
, q$ ^* ^# ~9 j' M& G& m // randomize the order in which the bugs actually run
3 |: X5 q/ V' n c9 p. C // their step rule. This has the effect of removing any
7 g2 x0 |5 ?. n7 n8 z9 z/ I // systematic bias in the iteration throught the heatbug
( {3 \, R2 \7 l2 i }" O // list from timestep to timestep; A0 |4 J. F4 p( J. `8 S
& |" g: q, x4 a3 F+ Z
// By default, all `createActionForEach' modelActions have
8 N- o( [/ i; Y, B // a default order of `Sequential', which means that the v" ~8 K+ {0 }5 s' f7 k' r# R
// order of iteration through the `heatbugList' will be: \& X; ?; a( [9 X* E" O
// identical (assuming the list order is not changed
8 m: s6 D) \6 ^% e" o // indirectly by some other process).
$ c4 i& [7 C0 }& ?6 i" T# J
# j$ Q/ `0 p9 ~0 t modelActions = new ActionGroupImpl (getZone ());% C' r: S$ N4 H0 p( k% t
+ @" B0 N: i6 e' m# B0 G6 ~+ s U
try {
8 |2 B& H% u9 M3 K9 L- P; S* W modelActions.createActionTo$message
1 G8 Y! x" W& |$ B' p (heat, new Selector (heat.getClass (), "stepRule", false));$ B. l, n" R+ h! a& d9 z
} catch (Exception e) {
# D) s Z- x1 J) m7 F" d) X A. E System.err.println ("Exception stepRule: " + e.getMessage ());+ Q9 M* r- S# \ E5 W2 x
}
7 j) n3 T# b6 G5 W
2 m/ d& g H8 b. M9 H& ~4 X try {
! p0 x% E" y4 M; S- j1 L" i9 S; j. I Heatbug proto = (Heatbug) heatbugList.get (0);
8 @$ n8 ]4 F. p7 i7 }, o; d Selector sel = 3 P$ F5 b2 [+ @% Y5 H
new Selector (proto.getClass (), "heatbugStep", false);
) Y3 c2 t$ F) _, H1 K actionForEach =
. c0 u' ` H$ B: u7 }. m modelActions.createFActionForEachHomogeneous$call; z- s$ Q* }/ U N) |9 j) f* [0 }
(heatbugList,
7 [* ^1 G! i9 @4 m new FCallImpl (this, proto, sel,
8 d" l( o* }6 R% \. ]" j new FArgumentsImpl (this, sel)));$ R. |. j, Q3 V% h
} catch (Exception e) {
( v5 Z$ R9 j% {& _8 `) o e.printStackTrace (System.err);* h$ Y' d! g- |0 R$ {$ y! O% V1 \& c
}
8 `1 I! Z, O( `$ u w
& l. q0 [' E, M/ m5 y syncUpdateOrder ();: S" }6 q2 l% z1 {" V& ^* W
* O4 i! @! r- P$ m
try {& Y* C+ D+ w8 B2 i( W7 @: @
modelActions.createActionTo$message % R4 I+ c0 }9 k% X5 m+ I
(heat, new Selector (heat.getClass (), "updateLattice", false));- l6 T( {0 x2 A" d+ p9 w8 C
} catch (Exception e) {% P$ {7 l* v+ {/ q* w; X$ R
System.err.println("Exception updateLattice: " + e.getMessage ());8 Y5 `* M# [& H: M8 k
}& i6 p) K& m' f
! H! d/ X d8 a' z9 E* P3 w
// Then we create a schedule that executes the
$ ]+ F+ G4 ~% B6 C- X& l // modelActions. modelActions is an ActionGroup, by itself it
$ r9 d7 {) H' ~( R0 [ // has no notion of time. In order to have it executed in
% k8 Z; {) a# S( u( e // time, we create a Schedule that says to use the
# g) p3 G9 k4 y! Q% ^, Z // modelActions ActionGroup at particular times. This- [9 M" ~! {$ z' G2 _
// schedule has a repeat interval of 1, it will loop every2 @- ^8 n$ {0 t: A& N
// time step. The action is executed at time 0 relative to
) N: d) f& v1 i$ s // the beginning of the loop./ R% p6 O- O7 {8 V4 U% A2 ?
+ s) z+ d5 A1 _1 e" g
// This is a simple schedule, with only one action that is
5 k- x- Q. d# x // just repeated every time. See jmousetrap for more
9 K" U' p- @4 h // complicated schedules.
/ l {0 N V- T1 a 3 j5 t( O$ h# o- ^1 j4 `
modelSchedule = new ScheduleImpl (getZone (), 1);
1 ]' O9 W9 F; J/ S modelSchedule.at$createAction (0, modelActions);
* y! p+ [: I; v) r" Y * M; S1 H7 T$ `- q
return this;: t3 J+ n* C( e, m& G% K
} |