HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 Y- x! G6 m }2 W4 v* @
( F5 i1 I3 J* Y. z( u3 P
public Object buildActions () {5 j1 P: N V6 i& z0 `4 {( c
super.buildActions();, V0 [8 F- t' `; G8 T
( \& z# p- B6 P/ H7 U% g6 T
// Create the list of simulation actions. We put these in
# c" _0 s/ E n1 N- t2 V // an action group, because we want these actions to be" `) D; W+ {* c$ {; m0 o$ N
// executed in a specific order, but these steps should
; g1 m' }4 L2 S, B: Y // take no (simulated) time. The M(foo) means "The message
1 C- Y+ g3 V+ c0 g+ @9 q' o // called <foo>". You can send a message To a particular4 n U5 X/ g7 B7 T
// object, or ForEach object in a collection.. ^/ J- ?" N7 O/ |6 M1 v4 c
" T% [6 w( v# B/ S* G+ B // Note we update the heatspace in two phases: first run
9 L9 G- M, Q# z6 G0 r+ i // diffusion, then run "updateWorld" to actually enact the
& p' H1 I+ T% X4 _+ P& }( V% C9 g8 @2 M // changes the heatbugs have made. The ordering here is! M7 X8 _7 W M# {! w
// significant!
" K# ?3 h" d+ a8 ~; |( V; H# t4 X
! r5 o9 T. ]1 A) M& q9 V8 c // Note also, that with the additional5 S/ H8 H I: v
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 B0 P: i4 W9 y* C5 Z! o$ F% K& u // randomize the order in which the bugs actually run
- f+ o1 U9 j2 C$ {) a; p' U9 L // their step rule. This has the effect of removing any
1 X2 R m1 U/ K" ?; Z# h$ E, j // systematic bias in the iteration throught the heatbug3 h$ X# I. I! W9 q$ O1 a! [
// list from timestep to timestep
% |$ d/ J8 F: q
% I2 E. T5 t; d& R // By default, all `createActionForEach' modelActions have$ |) H8 P& l8 E
// a default order of `Sequential', which means that the
; f7 f: S3 B- b // order of iteration through the `heatbugList' will be) {& l+ [. C O& N4 u/ K
// identical (assuming the list order is not changed' V1 y2 E/ R3 [# R, z' H& P3 f
// indirectly by some other process).+ {- J- X/ N, r: T+ U; a. V
4 [* I2 Y/ c& C0 |# T3 C+ c modelActions = new ActionGroupImpl (getZone ());
" L G. e# P- q* h; y% ?) F& ~4 _, a0 b6 r) } G
try {( ]8 l3 p w* L9 n1 W7 |. w& n
modelActions.createActionTo$message
0 e% l# ]6 ?% H (heat, new Selector (heat.getClass (), "stepRule", false));: p; ]1 E( A }1 Z N
} catch (Exception e) {6 y$ ?; W& R9 G [" t$ H# {
System.err.println ("Exception stepRule: " + e.getMessage ());8 D$ t) r* ?& O! ?) a# V' Z$ H' ^
}5 m3 S5 x) c. c4 P$ m. s& I% L4 \: q
. z5 r. P1 R, C1 L try {
. T. {1 ]% F' U" p+ I$ O0 g Heatbug proto = (Heatbug) heatbugList.get (0);. S! B) g) q4 u
Selector sel = " @8 ~# e; P5 r5 e$ b$ m
new Selector (proto.getClass (), "heatbugStep", false);
^( \8 l0 Q x( h- `5 h9 O. P actionForEach =9 t9 \- @, [+ V7 g, W
modelActions.createFActionForEachHomogeneous$call
/ k! q- ~' H+ w7 B/ E( v- Z8 V# n8 L (heatbugList,
5 d9 f/ m, P( J4 [0 j0 J; m$ k new FCallImpl (this, proto, sel,
. u1 [1 t/ v N, Q0 C, g/ s new FArgumentsImpl (this, sel)));3 ]& I, l' W+ q: G5 p4 u2 V
} catch (Exception e) {
: y* ?, V4 G+ s: d- G! K% P e.printStackTrace (System.err);
A8 { p5 h% _' k( |3 h }
5 i& S; b1 [1 L. I* Q4 a' d" { , K8 n2 a/ d( L. m
syncUpdateOrder ();) m9 a, ~2 K8 o7 m, e1 w) W
' O+ A! V' P: v4 F) n
try {7 ?) x1 Z: ^$ A/ q: t R" x
modelActions.createActionTo$message " ?! k7 h; L: V( q8 N2 j
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 \* O( y6 n, E5 t' u5 ^ } catch (Exception e) {
; q8 Y5 n% C& j: F4 g9 i( K) e System.err.println("Exception updateLattice: " + e.getMessage ());, h0 m& S6 u% ]# t
}
8 E" V3 H3 \3 v- h/ N# y \' \4 m4 g4 J" I" D b! G
// Then we create a schedule that executes the
/ R+ t' F7 ]; v* _/ S# l) P' g // modelActions. modelActions is an ActionGroup, by itself it
$ u) W( D1 m i, B% ~( n. ^5 A4 Q // has no notion of time. In order to have it executed in* L2 ]$ u% |+ ?' `9 f/ [! p
// time, we create a Schedule that says to use the
* f% m. ?( O+ {0 u6 |% E8 x" v3 _0 l // modelActions ActionGroup at particular times. This
& }- N7 _8 S7 l // schedule has a repeat interval of 1, it will loop every3 g+ N* }* L" n0 o
// time step. The action is executed at time 0 relative to
/ j$ [& N2 ^8 _# I3 J // the beginning of the loop.
i# Q0 q3 e! | C2 E. z! n
& O& P5 B; u" n1 p // This is a simple schedule, with only one action that is
$ S( A- E* l! u0 a+ p. P4 O // just repeated every time. See jmousetrap for more; u5 d% S/ G; }
// complicated schedules.
9 |2 i5 l( x' s6 q( C" h ; b5 n& z8 n* ]$ z5 ~* G' S
modelSchedule = new ScheduleImpl (getZone (), 1);6 A( b2 x7 @7 O4 _! q* e3 N
modelSchedule.at$createAction (0, modelActions);
, `/ E- j. o7 ^4 V1 |4 r
3 z& `8 L, Q& L) R return this;. [0 I- o* G5 ?$ g8 ~7 K
} |