HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* h+ h6 M( J# a0 O1 t
; O/ \& c5 N P' s! ?# B2 {6 ~
public Object buildActions () {
" t' G+ y/ L9 f- i9 C super.buildActions();
- d$ T J! ]* z/ }9 J" a( X: L $ f4 c( w8 q# H6 j+ L
// Create the list of simulation actions. We put these in
+ {: \. t/ \7 S1 y // an action group, because we want these actions to be8 l, h, N0 y' e+ m9 J
// executed in a specific order, but these steps should
; m: v* L2 w1 @9 G9 E) C, A+ Y // take no (simulated) time. The M(foo) means "The message
# e% x0 U$ d7 J( T1 S // called <foo>". You can send a message To a particular
0 [) l' m) y& @) B+ G // object, or ForEach object in a collection.. W: y$ y3 r" J# Z+ p$ S% E3 h
0 G9 H N0 H# Z; p) P
// Note we update the heatspace in two phases: first run
3 k I+ k# j# A( S0 C // diffusion, then run "updateWorld" to actually enact the& L, ^6 ~, U4 R1 k
// changes the heatbugs have made. The ordering here is* {) X) n1 A' e: u4 {/ x% J1 p: T
// significant!/ [/ X( i2 i8 B0 a
4 [" [: r; k8 L1 g# z) C
// Note also, that with the additional% C/ c% C8 r7 L" _5 K- b* z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 `- Z7 Y+ b$ T; z8 C. M% P // randomize the order in which the bugs actually run0 r6 v; @; H: r" J
// their step rule. This has the effect of removing any
* J! J' T+ o; A8 i& i( X R // systematic bias in the iteration throught the heatbug/ F' f9 R# z7 L( D2 R! b+ w7 h
// list from timestep to timestep' T; L1 k `0 I3 O
; \$ y2 F4 m4 y // By default, all `createActionForEach' modelActions have0 r2 j* _2 Q; P0 a/ P9 D2 ]: f
// a default order of `Sequential', which means that the+ L- h+ K$ F. K, C" e1 {% V; s
// order of iteration through the `heatbugList' will be
: `2 W# L& j8 U2 y, ^# Q, h // identical (assuming the list order is not changed6 U% V0 j/ h4 [' x: P7 S
// indirectly by some other process).
f1 d6 U9 \0 n1 Q 4 Q3 E* X; Z7 @5 h5 R" j& l* ^( W8 X
modelActions = new ActionGroupImpl (getZone ());9 U& d8 V: {4 }) ?0 f& P8 Y# `
|5 F: N- B$ s; w& D try {
8 {9 V, t( Z3 V2 x# N modelActions.createActionTo$message
6 \" `! ~. a/ H/ _4 L- b' C (heat, new Selector (heat.getClass (), "stepRule", false));
5 h; C- U) b+ g7 q } catch (Exception e) {
% E5 t" O: ^7 T C' C# X& b System.err.println ("Exception stepRule: " + e.getMessage ()); @& p& Z, E; p/ X3 Q( [8 W
}
7 ~+ c2 ~. S" D' D2 N% S" A1 Y, v
try {
% I' i' b7 |" [. b, b$ I& Y1 k. y Heatbug proto = (Heatbug) heatbugList.get (0);' r1 K0 S! `5 A$ t. R' a8 E: [
Selector sel = ! y# G# e$ G5 d; [; K, W
new Selector (proto.getClass (), "heatbugStep", false);
/ X* ]) x9 E; J. N& R+ I actionForEach =; V& v$ C5 G W+ j' k
modelActions.createFActionForEachHomogeneous$call
* v' x# ^: l) H% |( B$ R/ B3 ? ?4 C (heatbugList,
5 w- D. \: @0 U& Z new FCallImpl (this, proto, sel,! Z' u# E8 U6 r
new FArgumentsImpl (this, sel)));
$ A$ @# W0 O# f/ g! z$ H: ^5 X } catch (Exception e) {
0 z( W1 s- l1 b, m e.printStackTrace (System.err);
0 N. e2 b/ M" U. K* }0 I" y# |( n) [ }
! a2 v: }4 m% g3 ?! A ; l* o9 C; v% U- I
syncUpdateOrder ();
* l' {! Q9 t" S3 I W, ?4 k L z \
try {
! s6 y4 K( `& e% A/ R modelActions.createActionTo$message
+ Q" d+ R) }5 d& I9 `. A& {( |# | (heat, new Selector (heat.getClass (), "updateLattice", false));
# }' n, {- ?& { o1 g } catch (Exception e) {
. K# C9 d" T' T& ` System.err.println("Exception updateLattice: " + e.getMessage ());7 J# X" e* R& m! ^. r+ ]( n' x7 O
}" [3 R0 _0 J, j, z6 \5 h- U
: p3 z0 L8 e) Y' E! g
// Then we create a schedule that executes the' @ m3 V( z4 w1 A
// modelActions. modelActions is an ActionGroup, by itself it
+ y L9 I9 f; w // has no notion of time. In order to have it executed in
8 _ {' c- L1 q* f. h O // time, we create a Schedule that says to use the* n1 t, r3 @7 M8 Q5 N$ I. v
// modelActions ActionGroup at particular times. This$ A/ i# e: P0 f( m _( I! R; O; {
// schedule has a repeat interval of 1, it will loop every, w1 u# W" F7 U5 p# b4 n
// time step. The action is executed at time 0 relative to
/ z0 n, C& v4 F7 l) i7 G // the beginning of the loop.
& n4 E- S; K- p
1 n8 F. ^* X9 O9 \0 L, l' ?4 u' Z // This is a simple schedule, with only one action that is( ^. T, {! Z6 @0 w1 {- T3 y
// just repeated every time. See jmousetrap for more
, a) s# i4 C9 \' y# P2 Q% [ // complicated schedules.
4 l( n! \$ y6 B& d# C
" P' E' H( \8 R! N, C modelSchedule = new ScheduleImpl (getZone (), 1);
. U6 J( s; m/ q& k& K. h6 q modelSchedule.at$createAction (0, modelActions);
: N: U" G! m _: \0 m6 p3 d O
9 I% m" e6 J A) l return this;8 W: [+ j/ p2 `8 ~! g; v
} |