HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# x1 T+ x; t+ |% \& Y9 \9 N
/ }. a3 d. {/ ?& ]; a c$ M3 O8 ~
public Object buildActions () {7 f3 l8 p2 H, Z# j
super.buildActions();
, ~( M, c2 ^4 y! K7 P* n
4 `+ F, h1 R: Q- f5 a$ p# W2 x // Create the list of simulation actions. We put these in& Y. M9 L5 |6 D- E; C) u( z) p% c
// an action group, because we want these actions to be: I9 e) J$ C" R, C9 i# U. |1 l. V2 q
// executed in a specific order, but these steps should( d9 j2 p7 f+ @7 p2 J- d6 [$ e
// take no (simulated) time. The M(foo) means "The message) ~& f! p0 s% ]% P$ Y$ F9 S* \3 U
// called <foo>". You can send a message To a particular
- Z: f7 O! p/ K- Z // object, or ForEach object in a collection.% p6 V' U/ J- ]/ ]6 ]: `7 a7 _
$ I! L0 i u) K4 a' g0 e$ e // Note we update the heatspace in two phases: first run R4 k- p+ Q& A! ^& {
// diffusion, then run "updateWorld" to actually enact the
, \3 u9 u8 y+ {- S; ` } // changes the heatbugs have made. The ordering here is( C7 U: ?# Y6 _7 A8 \9 j$ @1 _
// significant!
9 p7 K/ Y* W2 r. u$ H+ a9 M : v: a6 v( Y+ ~, N5 W" ?5 s
// Note also, that with the additional
- A) R( q4 e) G // `randomizeHeatbugUpdateOrder' Boolean flag we can) V' g& O5 v6 `5 \0 ~4 x
// randomize the order in which the bugs actually run+ ]6 @1 h) `' O6 @4 }# P' A
// their step rule. This has the effect of removing any D% B& ^ A: U% ^1 l
// systematic bias in the iteration throught the heatbug$ V9 p& _, r( B# ]
// list from timestep to timestep
+ d [; @8 O0 R( M6 y/ K$ w: s3 d a( ?, D1 l. K3 G8 P" x$ T' }% w
// By default, all `createActionForEach' modelActions have2 Q0 _) a% v8 w3 }9 n
// a default order of `Sequential', which means that the
; E1 Z, n: D, }& O4 c, l // order of iteration through the `heatbugList' will be5 t- U/ t3 L3 q) H3 x
// identical (assuming the list order is not changed0 i1 v. Q7 G" o% ~1 g0 E, P
// indirectly by some other process).6 ]/ \% E2 |4 A
9 ?! Z F7 U5 z* m% q
modelActions = new ActionGroupImpl (getZone ());
9 h3 h% A, f9 U0 h4 `, b7 X1 K
try {+ w! P2 }4 s+ C( q# g7 S
modelActions.createActionTo$message
2 G5 ?, h% @1 Y; C" d (heat, new Selector (heat.getClass (), "stepRule", false));
. Z- [) i& C# i7 H9 g4 G7 d7 B% }% O: A } catch (Exception e) {# ^6 q; m- o I7 @7 l
System.err.println ("Exception stepRule: " + e.getMessage ());
+ }7 @1 F @* |. H$ i7 m }
# @8 z& c5 J( ^9 u' d
& |3 }" `: P" s8 h' x try {
' v* W1 ]3 ~/ V' u Heatbug proto = (Heatbug) heatbugList.get (0);+ h. r! M' D* {
Selector sel = % T2 D7 |0 i! r6 G$ t
new Selector (proto.getClass (), "heatbugStep", false);
8 X/ z. K4 C* C0 L& _; B9 c# }1 ^6 p actionForEach =/ R; @2 H0 \! M
modelActions.createFActionForEachHomogeneous$call: r8 Z [( a% ~/ ]8 ?
(heatbugList,; U% x' \8 M. d' Q6 X7 r
new FCallImpl (this, proto, sel,
G* b+ u0 U2 S! J9 s5 ] new FArgumentsImpl (this, sel)));! l0 @% v# e4 {' F( n9 i% _- Q
} catch (Exception e) {! x: m `0 z; y$ ?6 X8 O
e.printStackTrace (System.err);+ T+ C! W4 W0 |9 j# J
}
# `) {. _; G# _5 c3 @ 4 Y3 t; H- P: @
syncUpdateOrder ();
& H2 y$ C% w l1 K6 J( h
, |4 w. d3 R! W! l try {
- A" A" @; U4 U$ W; Z4 Y modelActions.createActionTo$message ' D* e6 t3 Q& w0 F" T$ f
(heat, new Selector (heat.getClass (), "updateLattice", false));
& P( T. K3 C. x4 N4 ? } catch (Exception e) {
. `' b) D1 ~/ y5 k System.err.println("Exception updateLattice: " + e.getMessage ()); X: e7 K9 y( z4 P
}- @( J' k- q/ z$ k
; K$ I) c) S2 V0 \ // Then we create a schedule that executes the6 {+ X' h V# r6 }# L- Q0 ]
// modelActions. modelActions is an ActionGroup, by itself it! ?' z% d# d: e9 `* o0 {4 h% j; M
// has no notion of time. In order to have it executed in2 C, G Q) J" J$ I% m1 `# w
// time, we create a Schedule that says to use the9 [* q/ J# S9 m$ c8 X
// modelActions ActionGroup at particular times. This0 W6 A, X9 b) D3 o$ D3 p4 S
// schedule has a repeat interval of 1, it will loop every
5 r6 R" q/ v9 Y2 N1 k // time step. The action is executed at time 0 relative to
) [" B0 a, z8 `9 b; K // the beginning of the loop.
: {% n1 A, V% g; [( d
' H& h, m0 d# I- \! O // This is a simple schedule, with only one action that is
0 I( K4 D0 z* q; e1 A/ Y9 M% D // just repeated every time. See jmousetrap for more
( }: `6 F+ P$ p4 g // complicated schedules.. n( b* R7 \; U- [
0 C, h6 G. ?( S! G9 W
modelSchedule = new ScheduleImpl (getZone (), 1);6 G' ~! r3 h0 T9 ~ D
modelSchedule.at$createAction (0, modelActions);7 T2 A( T, K- f! O5 u
& g c' K" [: H E i6 _ return this;# P* X9 ?% l+ a, X( c6 u
} |