HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 C6 k: M3 U1 }% e3 Z! ?8 q" W
2 r5 k' z( l1 M* n public Object buildActions () {
! O$ U. O% |. g1 I super.buildActions();* l5 H. I' U+ _
Z; Q* S& z" e5 k' W' s
// Create the list of simulation actions. We put these in
. T; t& e8 y( h* B5 A7 a3 Q // an action group, because we want these actions to be; i% f& |1 Z9 H. x' x0 y
// executed in a specific order, but these steps should
9 `0 Y3 E, P0 _2 R3 K // take no (simulated) time. The M(foo) means "The message/ f# O0 V5 _. Z+ z
// called <foo>". You can send a message To a particular
$ K" T! e- x" t! Y2 {+ ? // object, or ForEach object in a collection.1 J9 R0 w; r& [; c/ d
9 F3 ?& f9 F n& B
// Note we update the heatspace in two phases: first run9 [$ T: ^, z" W( J- v2 B2 Q% m+ a* m
// diffusion, then run "updateWorld" to actually enact the3 B& `, }( { @" m2 f" O
// changes the heatbugs have made. The ordering here is
: J8 J7 c5 R6 D2 S // significant!
& w( R0 i$ _" M# B; F8 K
9 s1 K% Q7 ~ d. @& T- \! B) a- d& X // Note also, that with the additional# }. ?/ q$ l" a8 l
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. n2 G1 R8 o |3 c // randomize the order in which the bugs actually run
% J3 h9 z/ T% ?; J4 z, }( G // their step rule. This has the effect of removing any9 U3 ^. Q. I/ Z# N0 o
// systematic bias in the iteration throught the heatbug
. V6 A' f. |5 @+ V // list from timestep to timestep
* x9 Z0 I( o3 x8 P5 z. @ 8 w; B: O5 A( H$ U- A- {
// By default, all `createActionForEach' modelActions have
& }' J0 _' y& V9 H0 P: C // a default order of `Sequential', which means that the1 m* k# A: p$ A* _; S
// order of iteration through the `heatbugList' will be
5 T( ]- M; I' _ d" H. w // identical (assuming the list order is not changed
& H! |+ A* `# z4 h+ X' y# G8 t @9 E // indirectly by some other process).
/ s, B8 e2 I% o* B$ e
]3 X& _. i0 H modelActions = new ActionGroupImpl (getZone ()); E' C3 j; z* F
! u" C4 i: T J2 R) l9 |- z+ F3 r try {, ~' k7 v, |" Q/ t, j/ U$ J
modelActions.createActionTo$message1 ~9 N8 x$ V: g( l6 S
(heat, new Selector (heat.getClass (), "stepRule", false));
+ _' Q+ y) M+ D! ], G1 l } catch (Exception e) {
2 A r8 M. o. s3 t4 e5 k5 v3 n System.err.println ("Exception stepRule: " + e.getMessage ());; A3 Z+ ?: `) c
}/ X9 j/ `# q* D/ n' ~1 p- W
4 \) [7 o2 w& y; \0 t try {
; \2 c k" P6 \2 y Heatbug proto = (Heatbug) heatbugList.get (0);
) {* \: r9 q/ H# t; R& \( S& c Selector sel = \6 }5 |5 B# ?; Z
new Selector (proto.getClass (), "heatbugStep", false);/ I! S- s# F( B2 [
actionForEach =/ e% T# E+ {% J4 i+ k) a
modelActions.createFActionForEachHomogeneous$call
# e( q, A: m$ a5 R, ?( c (heatbugList,
1 F3 ], x0 i% r/ s5 w2 y4 [6 a3 u new FCallImpl (this, proto, sel,
' Q! S1 {7 i C' ^8 O/ b new FArgumentsImpl (this, sel)));
% [* u0 {" j% \# @$ R } catch (Exception e) {
" w% [$ {/ B7 u5 }* _* V7 [# B e.printStackTrace (System.err);# |7 K6 z3 X" x5 h
}
# K, m- C ]- q: E: v6 r
& v0 s- D$ F$ ^9 `1 P: O! F( w syncUpdateOrder ();
% L4 p1 F% u d- M
; ?- W0 z6 R; q8 S' M6 S, g+ Z3 D6 | try {4 U0 a7 ? w3 ~# b D
modelActions.createActionTo$message 1 b! c9 L6 @" x6 \8 k: F
(heat, new Selector (heat.getClass (), "updateLattice", false)); R) ~# d+ i, t% o5 \/ |. _' ?/ c
} catch (Exception e) {0 c! b& w& P: u: {
System.err.println("Exception updateLattice: " + e.getMessage ());* O) s+ @) ^# u, c- e
}
$ V: s( L7 w) f ]. z
3 D- W! u3 ?) [ d3 l; M& O& N j // Then we create a schedule that executes the
2 b% Y* B% C- A2 {8 { // modelActions. modelActions is an ActionGroup, by itself it
' ~" T* M( j5 e) G2 ^; \ // has no notion of time. In order to have it executed in* O* w4 T7 t) W
// time, we create a Schedule that says to use the) ]9 u% N8 N! E) o6 [
// modelActions ActionGroup at particular times. This
% ?! D/ q W# C3 \4 R& b // schedule has a repeat interval of 1, it will loop every% s0 D, B6 D% h9 l
// time step. The action is executed at time 0 relative to2 _7 ^" G5 o3 Z1 s
// the beginning of the loop.
( B$ m' }; n, I7 @9 T- c; N$ v9 a" b' f3 M9 n1 }7 |
// This is a simple schedule, with only one action that is
2 `; z3 t$ w1 `5 p/ a1 h // just repeated every time. See jmousetrap for more
+ t1 X$ d0 b6 \/ w6 x+ k4 M2 i // complicated schedules.
2 m: R0 e# T! p
2 f4 W5 X% l( [ modelSchedule = new ScheduleImpl (getZone (), 1);# i3 S' Z2 ^& }1 x
modelSchedule.at$createAction (0, modelActions);
# U; t' u/ O+ T( q " |6 ^: ]$ R3 J' s T
return this;3 L6 d2 p, c* Q. [: Z" y3 }* s
} |