HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ _0 u' j; \/ M: \& H4 ?
. P' r+ g$ c% R' F& Y
public Object buildActions () {! {& ]& `; o: [
super.buildActions();
' @) P/ n9 U9 Z# Q: ^
9 i/ h; a4 S$ ^' [! @' l: W, B2 d // Create the list of simulation actions. We put these in H& d3 M6 y& I; V
// an action group, because we want these actions to be
5 G/ R" L/ T7 Y, x2 M3 m( G // executed in a specific order, but these steps should
) F3 b' G$ B# }' i v/ A // take no (simulated) time. The M(foo) means "The message
" R/ j: u! p$ m' m( L7 c0 y // called <foo>". You can send a message To a particular
U! y5 r0 T: X$ q/ {0 P // object, or ForEach object in a collection.
7 }$ V$ H0 H# D# R, J! F4 t( o3 L
j9 O. W4 ^! q( B( {/ {, [; n // Note we update the heatspace in two phases: first run$ S8 }( _" Y; G
// diffusion, then run "updateWorld" to actually enact the! c* O1 d8 S1 B+ x) n9 K* y: a; h
// changes the heatbugs have made. The ordering here is
% X2 h& W. U+ p! R1 V4 w // significant!4 H$ o( I X6 {* a5 Q* W" R
. [6 Q- S# J) ]# e, B1 Y/ D" Y' Q
// Note also, that with the additional
t, l3 u( Y, Y0 o u // `randomizeHeatbugUpdateOrder' Boolean flag we can
/ o5 b: E8 t9 J1 h- [, ` // randomize the order in which the bugs actually run K! a2 z* o2 D
// their step rule. This has the effect of removing any
0 [! n: } C* D+ w- s // systematic bias in the iteration throught the heatbug
9 `# }" P. v K$ B& @ // list from timestep to timestep* _' H8 I3 E$ m* o7 |+ R
. k$ \! d6 s" G% o+ u // By default, all `createActionForEach' modelActions have, W. K2 E9 L+ {3 }5 t
// a default order of `Sequential', which means that the
0 v0 z' F$ f, J9 \9 X& s" Z // order of iteration through the `heatbugList' will be- H/ N; v. r# }" s+ e+ j
// identical (assuming the list order is not changed
: q3 `# V9 ~# M1 J$ e3 o# R // indirectly by some other process).
& O) K9 `: x/ L' c
0 F' ]) C" f/ C$ T) c5 E modelActions = new ActionGroupImpl (getZone ());8 ]% I# x" |8 K9 J6 U0 H) B
& ~/ P3 `; r' ~; h& y: a& d try {% x; M" S2 U3 v% ~
modelActions.createActionTo$message
9 L4 N1 v! R7 n7 ^7 L (heat, new Selector (heat.getClass (), "stepRule", false));, B+ o/ f5 ~! X, \- ?% m
} catch (Exception e) {7 G2 d2 U7 A5 ` F3 { e" f
System.err.println ("Exception stepRule: " + e.getMessage ());6 A- l" n4 s/ y$ R: E- Q
}2 I d4 o5 I( m
. M7 W- d. c* @0 O, C4 h4 J- w# z
try { ^$ D* y+ c0 f$ c+ k
Heatbug proto = (Heatbug) heatbugList.get (0);) `9 b8 B) d) z4 Y J3 Z, b
Selector sel = ; t; P- G& c6 C0 F* C( x( \; {
new Selector (proto.getClass (), "heatbugStep", false);, C% F, m( t* }6 d; A0 V6 j2 Z
actionForEach =# n) ^% {0 I8 a* ^
modelActions.createFActionForEachHomogeneous$call3 h7 @" A, P1 K
(heatbugList,
; w/ t1 R- [" b1 b1 r: L' W% V new FCallImpl (this, proto, sel,& e3 B# z) ?$ F! Q1 ?
new FArgumentsImpl (this, sel)));
3 u8 r, U3 C$ j/ I* G. Q* n } catch (Exception e) {
1 C2 J( n; I8 M2 T9 a q4 i" E e.printStackTrace (System.err);
1 d, o% w4 J7 {/ g- ]7 ]+ p3 _ }- Z5 V e! l, | P" e) I1 E
' w! n7 x( r# i' j
syncUpdateOrder ();
+ u( x, B( B/ m7 K$ E
" o9 ?2 h- i: V! x try {
1 ^: W' G/ T* [8 Q6 O modelActions.createActionTo$message . f/ p0 Z0 T: K' L/ D0 y
(heat, new Selector (heat.getClass (), "updateLattice", false));
$ A4 |2 u( _1 V } catch (Exception e) {. }- W5 E3 P; o3 {) e
System.err.println("Exception updateLattice: " + e.getMessage ());3 t' W3 f" @+ r& Y# ?
}! ^& e" g* `( |/ j( h
2 R2 ?; ~8 W6 M4 `( ] // Then we create a schedule that executes the
; x# `- B) y. _$ Q // modelActions. modelActions is an ActionGroup, by itself it6 I1 V4 a/ h) I1 V
// has no notion of time. In order to have it executed in3 D6 h8 D( n9 U
// time, we create a Schedule that says to use the+ s2 l, L# e6 A7 Q& i
// modelActions ActionGroup at particular times. This; M$ }! D* u: S# u/ ]. _0 k
// schedule has a repeat interval of 1, it will loop every
3 P, T5 h; x) H$ l1 I // time step. The action is executed at time 0 relative to
& T/ l; {6 c, ?# N) K. g // the beginning of the loop.
" Q3 M' _0 J# q- B% ^9 p8 \
4 |$ k! y6 t8 f3 S9 `0 V8 h // This is a simple schedule, with only one action that is8 {9 h# `) T" Y2 B
// just repeated every time. See jmousetrap for more& Z/ a+ S, V& L6 L" Y v) O* q7 P
// complicated schedules.
5 t- d6 e+ E& w% F
0 r$ t" A& c- |: Q# ~' a$ x* k modelSchedule = new ScheduleImpl (getZone (), 1);" h# n2 k0 b! D& d- i d
modelSchedule.at$createAction (0, modelActions);
) L! s% Q" R3 A& N& O
! L9 o' g) N3 _) g return this;
5 I* e. x5 s+ e/ h4 g5 O2 o } |