HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 r$ g% I! b' [6 z- x
7 W0 r5 A* v& G; ^$ A public Object buildActions () {
6 K+ b$ S. e$ ~9 K& o8 Q& G7 x super.buildActions();
z+ R: V s) i% F
, g8 ^$ P8 M; s$ i1 e // Create the list of simulation actions. We put these in7 J+ h% y( a# L
// an action group, because we want these actions to be
$ V8 A9 O, k% `& {" a2 ?% K+ [" B% ? // executed in a specific order, but these steps should/ `( ~7 M/ x6 |
// take no (simulated) time. The M(foo) means "The message
9 V0 N/ b/ V: ~, G3 l // called <foo>". You can send a message To a particular$ Y! ?- Y, `$ l( Z4 O, W$ {
// object, or ForEach object in a collection.! e9 }9 n3 D8 c9 |
( B5 E% J& u9 P; m4 N, U2 b
// Note we update the heatspace in two phases: first run
1 P. _$ p+ G% B+ z6 i Z // diffusion, then run "updateWorld" to actually enact the
0 Q5 A% ^8 t: I // changes the heatbugs have made. The ordering here is
8 e; {( o3 G" _+ } // significant!
' P7 x) x3 k( }' T) s ^3 J
) G/ q2 _' _2 J# q3 ]/ M' F // Note also, that with the additional
) e" j% F/ d0 @+ L // `randomizeHeatbugUpdateOrder' Boolean flag we can# v4 ~# E8 Y9 [" g6 ?4 R
// randomize the order in which the bugs actually run
5 i6 H# p- M# }" e- v$ B! V9 o // their step rule. This has the effect of removing any' N4 v4 }$ H$ j! P7 a
// systematic bias in the iteration throught the heatbug0 e u8 p+ T( i+ r0 [: \
// list from timestep to timestep, Q. I: D& e/ K. W U( t1 Z
# y. q: W; {9 \$ K. j2 a // By default, all `createActionForEach' modelActions have* C8 T4 e2 Y3 B( s: |
// a default order of `Sequential', which means that the
) ~6 A' B4 h3 A // order of iteration through the `heatbugList' will be
# x: x# d* T9 L% }( s // identical (assuming the list order is not changed
$ x) P: S2 A6 y // indirectly by some other process).. V4 i3 w# l, o7 l
- M0 v( L% X' P3 C& V0 i. X modelActions = new ActionGroupImpl (getZone ());
9 \8 w3 ?, x M& P& i! T6 t; Q/ t k! P/ @, H
try {
( i, d( p3 Q. _. @ modelActions.createActionTo$message
& r! a- ?7 G) e; ? (heat, new Selector (heat.getClass (), "stepRule", false));
5 v4 J3 I$ w6 b& V/ ?) u } catch (Exception e) {; O. ]4 q* J: ^! O5 e' ~0 f4 o
System.err.println ("Exception stepRule: " + e.getMessage ());
( J D Y5 W2 z }; F' C' x% J z6 ~1 i8 g
' a6 @2 D! j x6 P* g+ c1 `. u
try {
* V% K$ X8 I7 ] Heatbug proto = (Heatbug) heatbugList.get (0);
+ ]8 H) X# `$ Z' h Selector sel = / y2 N9 }: m) V6 Y& u$ s
new Selector (proto.getClass (), "heatbugStep", false);. q2 Q/ H7 K$ }$ o
actionForEach =. ^/ Y0 W* g' D- E+ E6 d' I
modelActions.createFActionForEachHomogeneous$call- W. x0 c# H9 K7 C2 ~& j- Z
(heatbugList," }2 C0 E( G$ e# |& U
new FCallImpl (this, proto, sel," ^% @, w' ]/ L% }
new FArgumentsImpl (this, sel)));! h$ h( o; a Q o
} catch (Exception e) {6 Y; B( T& a6 A9 ?% N( v
e.printStackTrace (System.err);
0 M% ~' p( J* e. \% e2 v; \6 ]! s }4 r) x% h8 v+ D4 r5 O5 I. {$ g9 L
6 v5 K# r( {8 e
syncUpdateOrder ();
6 V- `% f; W. a$ h6 _0 M
( m0 Y* ]% D% p+ ] try {0 U) E7 w- Y* C$ |
modelActions.createActionTo$message
; k0 o6 \( r9 k% X8 ` (heat, new Selector (heat.getClass (), "updateLattice", false));5 w; ?" D7 u6 H# @% o9 k, {5 a
} catch (Exception e) {# F' X* j, g$ b" V
System.err.println("Exception updateLattice: " + e.getMessage ());: ?: T/ X' W) h4 R
}7 O8 l& W! v. w5 T/ V0 q2 ~
' l9 z& |& F, _# `4 P
// Then we create a schedule that executes the. \1 o3 k; s0 H! t2 ^
// modelActions. modelActions is an ActionGroup, by itself it
& x7 Q7 g3 L# g) h6 Y9 B! w* g* m // has no notion of time. In order to have it executed in* h* U& v8 H7 \
// time, we create a Schedule that says to use the9 w( K( u, b3 U) _. U( C2 f
// modelActions ActionGroup at particular times. This
: Y4 d0 P! [- C) @' i2 I9 _ // schedule has a repeat interval of 1, it will loop every
1 I8 L/ ?( u# @! R7 z0 A* V // time step. The action is executed at time 0 relative to8 y3 c1 E7 ~! G" S% a8 s. U. M
// the beginning of the loop.' Z" ~/ y" b& B
) @* S( r" E0 T
// This is a simple schedule, with only one action that is$ p/ L# C: m5 h1 ~1 h
// just repeated every time. See jmousetrap for more
( C, C3 X3 Q* e // complicated schedules.
5 S4 a9 L% P6 s5 ~. A' J- ?) b
% O0 c0 g. A7 p/ E# X1 l j: i modelSchedule = new ScheduleImpl (getZone (), 1);
- z3 f2 q& H ^ K' l modelSchedule.at$createAction (0, modelActions);3 u. E/ u7 b4 M2 x4 t
: y% K, a; @5 f1 G return this;# [6 k! d2 F+ v3 J. h" q
} |