HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* e" g7 G! B: R6 x7 u2 w$ N- I" V6 \# p
public Object buildActions () {0 H H6 @$ M( c! ?. h) O) L! e3 x
super.buildActions();- S" {' _5 L0 B }! I) Y
6 P" U- a& }; }/ w( Y. |) \ // Create the list of simulation actions. We put these in
& ]& z# y7 Y/ ^/ ^8 u8 q // an action group, because we want these actions to be
, f5 B& f2 k' L( m) h. S6 [7 ] // executed in a specific order, but these steps should
- q; V) j, c$ p // take no (simulated) time. The M(foo) means "The message% p7 w2 K9 }8 [+ ?
// called <foo>". You can send a message To a particular; ^8 S; u8 E3 V$ a
// object, or ForEach object in a collection./ x$ P/ X' j9 M& D
6 U1 Y* u: W- c% ?( e; |/ N
// Note we update the heatspace in two phases: first run
# g1 x; f# t) T8 l // diffusion, then run "updateWorld" to actually enact the8 R( N* I1 N, |. A/ U% A5 t
// changes the heatbugs have made. The ordering here is9 S+ ~+ d+ v; m
// significant!
/ \2 k5 ~. G/ m1 b z2 j+ m ! ^1 e! y3 |1 g! r B+ C7 H* {
// Note also, that with the additional
: ~5 q3 D) C7 D# d // `randomizeHeatbugUpdateOrder' Boolean flag we can7 Q* f3 i0 b, J
// randomize the order in which the bugs actually run* ]$ B" x! h% d7 [
// their step rule. This has the effect of removing any
" D+ A+ @; y6 U z // systematic bias in the iteration throught the heatbug
0 B) l7 h1 B0 [, [6 G // list from timestep to timestep5 O' k; o; ~4 J5 B& g" n- `# v
9 v2 e' K( N O3 F
// By default, all `createActionForEach' modelActions have
$ V" k; Z a" D- j* ], B7 _ // a default order of `Sequential', which means that the
7 i/ Z5 n7 ~. D& Y5 k: [ // order of iteration through the `heatbugList' will be' Q* E% P; G8 p4 Z: F3 z( o f
// identical (assuming the list order is not changed! S; b2 c4 h2 j" ~7 I5 ~
// indirectly by some other process).& @. B. o3 c* _. V5 F9 H
* [, A' [ R* z1 K& K' n9 Y modelActions = new ActionGroupImpl (getZone ());
: G; \8 b/ }: K4 l
* P5 i5 \- i, ^( p1 M3 F try {7 w2 |2 I; ]7 H1 U! ^) h6 ^3 W' z" E
modelActions.createActionTo$message
, D- i# v D. X! t$ s. k' R (heat, new Selector (heat.getClass (), "stepRule", false));5 H8 h, N: M) r! c# D6 }
} catch (Exception e) {
) |0 F3 [( ?, a" C! T System.err.println ("Exception stepRule: " + e.getMessage ());7 K6 c- p7 ?. A3 U0 z& h
}9 X( K2 L! a) d% o. T
9 E; K( p" s* O( R" M. t try {
6 W0 P+ q( T2 h5 w3 R N Heatbug proto = (Heatbug) heatbugList.get (0);& g5 S1 f- |5 R8 E9 p7 a
Selector sel = , w% X9 i) p1 b- Q/ M0 b" O
new Selector (proto.getClass (), "heatbugStep", false);
6 W8 ~& C; K6 z+ D3 F actionForEach =
) M0 X/ e6 N6 J2 C- } modelActions.createFActionForEachHomogeneous$call7 z; @# c+ r! j" o# M" l
(heatbugList,
$ F2 Z+ w% Y( m) J, b/ S new FCallImpl (this, proto, sel,/ `8 W5 v( r) \$ P% H/ O8 S% n! ?( i
new FArgumentsImpl (this, sel)));
& m! h+ Q4 _" z } catch (Exception e) {2 w; J; {0 i& i3 w
e.printStackTrace (System.err);
( l h" g6 s, d* | }) ?" H3 T2 Y! m9 R- L s+ O+ X
! v( z/ g( _, j6 l7 V, L
syncUpdateOrder ();
% _' z) Z9 g, u6 L
% v+ B$ Q' w7 M3 C try {( E( J; U7 T: ]7 o* n3 ?7 G7 s
modelActions.createActionTo$message
' e* c: u! _. F/ }* T1 E" N: Q8 T (heat, new Selector (heat.getClass (), "updateLattice", false));
, r' j; t/ u: y. o! Z } catch (Exception e) {
# C! X* ~! K0 y' k System.err.println("Exception updateLattice: " + e.getMessage ());
) k4 p1 \* ^; v+ Y+ p! D }) h. E' C. @' p* d, r6 ? P7 d
" Z# z. H! T3 @7 I4 b0 K4 l- ` W // Then we create a schedule that executes the- _0 d) s1 f3 Z. f3 P
// modelActions. modelActions is an ActionGroup, by itself it/ j4 O* N1 S% p' C
// has no notion of time. In order to have it executed in! r( r, e& e* F2 s; D& b
// time, we create a Schedule that says to use the
- ^ B c6 ~ ] // modelActions ActionGroup at particular times. This
, P' F! k E) O+ ~% B$ G- Z // schedule has a repeat interval of 1, it will loop every7 ~( y. N0 Z1 i7 \8 c
// time step. The action is executed at time 0 relative to% S- n% V* b. l: }. E7 q$ u
// the beginning of the loop." O0 [! d. J- P' A* p. Y
9 T* N% i. C0 P, ^4 ` // This is a simple schedule, with only one action that is" v. f6 _! a4 I; B4 A; h
// just repeated every time. See jmousetrap for more/ _4 R4 D I5 y' S
// complicated schedules.
& J4 {" }* R F) V Q# g
4 [5 m6 ^0 i+ p modelSchedule = new ScheduleImpl (getZone (), 1);
1 j. @/ N! l7 V! d6 { modelSchedule.at$createAction (0, modelActions);
H- x, S6 w) |9 ^; Z ( u+ M1 a7 r% N0 ?- ?1 t7 u
return this;! R/ N7 E* I v B. K) e. P
} |