HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 Y; F0 i) P1 n( c& f# W
6 r J r2 g0 H! [, E; [ public Object buildActions () {( e% G3 l$ T3 c" `% z- n
super.buildActions();2 P! n0 d# _* W0 G6 s# C: {9 ~! u* ^
+ C$ _, m, X& o/ Z# I7 b q! I6 Y
// Create the list of simulation actions. We put these in
( z1 ]( O8 `% `8 `3 G5 w // an action group, because we want these actions to be
9 f# ^5 k$ n& H: \7 r( Q! w // executed in a specific order, but these steps should9 H: R6 N9 P) H( h% R7 j0 A2 o+ A
// take no (simulated) time. The M(foo) means "The message0 h; L F& b9 |& g, \6 Q
// called <foo>". You can send a message To a particular
K" z: w$ @6 p2 Y% B @8 R1 ` // object, or ForEach object in a collection.
4 C! K4 ^9 O* L" w7 [- M5 k* p
* T# ~! P! I/ a, ?! W // Note we update the heatspace in two phases: first run5 n& }! D1 D6 c
// diffusion, then run "updateWorld" to actually enact the
" N, B* d0 x: u // changes the heatbugs have made. The ordering here is
$ k! o9 a% O2 w. B; L! h2 r/ } // significant! `$ n$ Q9 @) y6 Z% C: G
4 y( o3 Y0 G, r6 `) J7 ^2 ~ // Note also, that with the additional
/ F! F; {5 j9 @( F3 i. d // `randomizeHeatbugUpdateOrder' Boolean flag we can
, U% V2 Q, S- O4 I // randomize the order in which the bugs actually run
" z5 k$ _4 a* l( Y2 |0 `, ? // their step rule. This has the effect of removing any
* h, }2 K" p9 V( ~9 p T // systematic bias in the iteration throught the heatbug
# g' [% s. w# s7 D3 X2 ^ // list from timestep to timestep
- k, ^ Z/ g7 F/ n" K $ S1 E) e5 a, `4 ^( L2 ~% j
// By default, all `createActionForEach' modelActions have
6 v5 v; n) C+ y // a default order of `Sequential', which means that the
) O3 S7 G8 n! F4 ~) k- T // order of iteration through the `heatbugList' will be; ?2 L) f1 J+ B3 ?8 m3 T# [
// identical (assuming the list order is not changed$ U: E0 }! u6 h- R. U; r& F, T
// indirectly by some other process).
$ J( ?6 D/ G9 k0 Q3 x' q5 O4 t3 h 1 a. u. v$ b* q" Z k4 E x
modelActions = new ActionGroupImpl (getZone ());
0 Y! j& Q0 ?2 R4 W; C# i! |/ z! M
try {
# K6 v# v3 D3 p$ d8 t) v modelActions.createActionTo$message1 r$ C& v/ H% V* u4 Q9 i
(heat, new Selector (heat.getClass (), "stepRule", false)); a' @ ~$ O: C( v0 s
} catch (Exception e) {
- S( k0 e; z) d# Z* T N System.err.println ("Exception stepRule: " + e.getMessage ());
5 O, w6 w# F% ?; | }, t" _! ?$ o8 a% O' Y% G' h
& D* ?" ^) y$ @/ Z
try {
' I: H: ?6 q5 ` Heatbug proto = (Heatbug) heatbugList.get (0);2 p3 Z/ ?/ S& f5 ^( `, p
Selector sel =
$ e7 f, d% v3 O' J new Selector (proto.getClass (), "heatbugStep", false);
: x' ~, o+ g. S" X# ]$ U p1 q4 m actionForEach =
% L4 v3 |6 t5 t( v) R modelActions.createFActionForEachHomogeneous$call$ m2 ?1 U! X, H* z
(heatbugList,
- a2 @0 C4 J; G( p7 r new FCallImpl (this, proto, sel,
: S. S- z w p7 L% K! \ new FArgumentsImpl (this, sel)));& Q' S* J( V$ X& N& H8 i7 P) _! g
} catch (Exception e) {
- {1 @# p" f% o2 n1 v e.printStackTrace (System.err);
2 i* z5 f7 x- p1 W) H) c9 g }
0 u4 K) I" [# g& y 1 C9 j) d- x+ _7 v* ]( v
syncUpdateOrder ();) `$ b# H5 ]& H2 C
, y& y( H, b' O8 b* C
try {) B/ v' t; m1 D2 a5 P$ Y$ [
modelActions.createActionTo$message
) G0 X, W9 Q0 Z# Y) C7 h% V" ~3 L (heat, new Selector (heat.getClass (), "updateLattice", false));
3 }4 u- ~. p$ i* J } catch (Exception e) {* Z! I% q4 ^/ B) q. B! L
System.err.println("Exception updateLattice: " + e.getMessage ());
% @1 E! o# O* T0 k }
* p# w+ O" V& N % }3 H* M5 V. l
// Then we create a schedule that executes the
L. @5 ^ h4 C // modelActions. modelActions is an ActionGroup, by itself it
# j9 L3 g) V/ a // has no notion of time. In order to have it executed in! o; m, f3 y( y h2 v3 t
// time, we create a Schedule that says to use the
) H& a. f& f9 T# { // modelActions ActionGroup at particular times. This
" v5 O. q, S7 d5 ?* p7 r // schedule has a repeat interval of 1, it will loop every
8 w9 g* T; C! T( ` // time step. The action is executed at time 0 relative to
: i( n9 v1 ?' D4 p0 H4 G // the beginning of the loop.
; E# D) C, ]1 e, O+ K; H3 N( [6 F2 l0 P) U
// This is a simple schedule, with only one action that is0 r, }, _5 l% d
// just repeated every time. See jmousetrap for more- c; t" G) J. w9 P8 q
// complicated schedules.
- P. A4 M+ |; x% H1 g {" ?
2 ?9 V$ ]0 I$ |6 l modelSchedule = new ScheduleImpl (getZone (), 1);
1 n; T4 ~5 C) ~- h, S# p6 L modelSchedule.at$createAction (0, modelActions);
3 r5 _ E: J" R " ?! D) |& k! @, P# U
return this;
* u; `! x D6 i# F4 X' h } |