HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 p* ?$ K4 [0 c3 t3 n, a* F5 b
# k5 l- H6 S% d0 h ]# Y3 x$ ~4 N
public Object buildActions () {
* a4 [: u( U! M( G! M super.buildActions();/ o7 ^! a. [+ F6 |/ ^' K: `+ j
, Z- O5 N3 T4 r) j6 M6 b
// Create the list of simulation actions. We put these in+ X0 K* J1 Y$ {2 q0 ?) Z
// an action group, because we want these actions to be
5 Q2 _! i$ G7 ~& n // executed in a specific order, but these steps should; t; h% h* V# a( Q; k- a9 A
// take no (simulated) time. The M(foo) means "The message
4 X) l$ T3 h! t4 j+ o // called <foo>". You can send a message To a particular, K/ W, G% i) [, K
// object, or ForEach object in a collection.- @( i. e) N/ O
% @6 f S$ j! k. l: l9 [ g/ ~3 [# P // Note we update the heatspace in two phases: first run! {& W% n/ z, ^6 w$ L9 K
// diffusion, then run "updateWorld" to actually enact the' S' h/ u6 n+ G Y6 H9 k
// changes the heatbugs have made. The ordering here is
f+ g4 k: L* y: z // significant!
3 L/ Q; ?* @7 X' ^9 a 0 h- y7 u5 M) H, D; p
// Note also, that with the additional( y, P: h% `1 L, v% T3 e
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, f' M: [5 J, o+ d) |1 Y // randomize the order in which the bugs actually run* @ r0 V8 x- y' C
// their step rule. This has the effect of removing any
# M/ z: K9 a. K6 r! d // systematic bias in the iteration throught the heatbug q) R6 X. q6 v9 o
// list from timestep to timestep I7 ^8 C M+ i* m
: z& h+ `8 A3 m3 m$ F7 w // By default, all `createActionForEach' modelActions have
; A6 f9 ]1 `+ y) ^ // a default order of `Sequential', which means that the$ T* k2 n4 M0 [* y) @, J. G" c$ e
// order of iteration through the `heatbugList' will be4 h- K0 L' q9 j
// identical (assuming the list order is not changed
) i. y6 e+ ^3 Z- o0 q // indirectly by some other process).* f6 D8 L) j( v2 n# x& ^
" a f" o7 m% ~/ ^9 v2 E
modelActions = new ActionGroupImpl (getZone ());" [' X3 H/ u6 Z8 g
0 a7 s% ]# }) C try {/ I& v& ^+ Y$ Q- v Y
modelActions.createActionTo$message8 c- {$ R% Q5 P; k8 w# i
(heat, new Selector (heat.getClass (), "stepRule", false));
) r# F; z( \5 T$ ?& i- r } catch (Exception e) {0 ]! I5 n/ a" k
System.err.println ("Exception stepRule: " + e.getMessage ());
" O( H) ?8 J' r! N- X2 w }6 ]# e4 y& }% D% s
a5 W+ E3 a1 Q# d4 w; h try {, F; M& ^4 s3 z7 _/ g$ ~6 J
Heatbug proto = (Heatbug) heatbugList.get (0);
" G0 e) \, l3 b5 B. h Selector sel =
4 Z% a( ^* W! I' {5 { new Selector (proto.getClass (), "heatbugStep", false);, A* T$ t# T/ \7 s5 F" M
actionForEach =
% f5 @/ S& ?* M; K( T2 A modelActions.createFActionForEachHomogeneous$call
$ B- x: q* N- d( Q- B+ @/ } (heatbugList,
1 Y5 q% m4 o7 I new FCallImpl (this, proto, sel,
, t2 E' h* A& A; t$ S new FArgumentsImpl (this, sel)));7 G: u; q& g9 s: F! ~
} catch (Exception e) {: M! a+ _. } y R/ Q; h
e.printStackTrace (System.err);
& s2 `6 O O8 p }
+ v2 q6 a3 G# r % c. l3 t$ y' k6 N6 ?* C
syncUpdateOrder ();+ m) t0 W7 B) i% n& D% T3 Z& v: B$ Y
. Y! B6 p$ I2 M e2 L$ Y R& Y D9 G try {
: t6 J7 T/ p$ ~* Z; N5 H; s% H6 O* E# ~ modelActions.createActionTo$message
5 X r$ S {! z (heat, new Selector (heat.getClass (), "updateLattice", false));
2 A5 ?: g' s8 a/ N, R% A7 i E } catch (Exception e) {7 d) }' d! c$ Q1 f' ?' I8 \
System.err.println("Exception updateLattice: " + e.getMessage ());4 }" Y0 J' c; I1 A# `# H
}
! @( O3 E2 [* `# H" G & a# |2 q0 w/ B+ s u' V) R
// Then we create a schedule that executes the
B# C- y- R: a7 o8 g2 w // modelActions. modelActions is an ActionGroup, by itself it4 a% \6 A8 t5 f* q+ _ j! U
// has no notion of time. In order to have it executed in
! b( E" P5 f7 a // time, we create a Schedule that says to use the
0 i: Z, g4 |" u. d6 g // modelActions ActionGroup at particular times. This
" u9 A3 Q7 c. F // schedule has a repeat interval of 1, it will loop every$ ?# C$ Z) x. \) n+ N
// time step. The action is executed at time 0 relative to8 G7 W# [( Z' e) W) W4 o! X' |
// the beginning of the loop.
H$ P) ^% U6 u
! `- q# K' [* `( U; f7 Q# T // This is a simple schedule, with only one action that is
, F# Y8 A. x) W // just repeated every time. See jmousetrap for more# P' c8 l9 b' W+ h4 F
// complicated schedules.# [' y, C f0 t2 `) s8 P. K
/ ]" e8 v( O1 y. \3 l& x# C modelSchedule = new ScheduleImpl (getZone (), 1);
9 Y- g5 T4 r: U* }( H modelSchedule.at$createAction (0, modelActions);0 L- z! s% m# J
# r f1 p5 }% z8 B
return this;
+ d7 @/ P5 b, B4 p& N( \ } |