HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 Q6 Y0 X/ [2 V. [& K
" o1 n; h' \5 z- `9 ? t2 T public Object buildActions () {# g* B9 }# i- a8 K4 n
super.buildActions();
+ `; m$ O* D- B4 W7 @
! K/ F; }5 P& o1 n1 q7 e" r // Create the list of simulation actions. We put these in( a7 @# ?* \2 M1 }! g' {( a! \
// an action group, because we want these actions to be1 E, F" v# U ?/ A
// executed in a specific order, but these steps should$ k( a( }. `3 F4 s% Z" Y
// take no (simulated) time. The M(foo) means "The message
6 E- y, o* q4 @/ e5 s ~ // called <foo>". You can send a message To a particular
2 p8 c# d9 h0 N7 B8 D // object, or ForEach object in a collection.2 p5 w" L- A# s2 C/ U" t4 ?
0 n+ U' @# s3 O. R5 F6 v5 f( ` // Note we update the heatspace in two phases: first run& N5 u# Y8 y4 ` X8 Q* s% U6 b
// diffusion, then run "updateWorld" to actually enact the
8 b4 N& Q2 M* a. e6 K/ t$ x1 T2 ^ // changes the heatbugs have made. The ordering here is
" I7 W' l! U: x; s& u) I+ e // significant!
& I3 N3 w# Q6 X0 m. A2 ^# F' ^
* }- X0 ^) Y9 U3 N7 d7 U4 y // Note also, that with the additional8 ~1 W, o- q H' ~- g5 |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
N1 W4 y" c3 ~% ]% L% D; ` // randomize the order in which the bugs actually run, _" e3 A) C2 f. G
// their step rule. This has the effect of removing any! w, k: S8 H$ M
// systematic bias in the iteration throught the heatbug
6 m# ~4 F* P. ^6 h8 v. } // list from timestep to timestep
# z3 o; N4 U* T# ]# i8 s& l
. Z2 Q8 g# l. q! V0 u6 O // By default, all `createActionForEach' modelActions have6 \" r. z. x/ u7 \# E
// a default order of `Sequential', which means that the
1 ]% |- [4 O P: `* I* @- Y: f) x // order of iteration through the `heatbugList' will be* f8 W: h! H$ y6 t8 v
// identical (assuming the list order is not changed
! P# u$ `. p: y) @* @* e# x // indirectly by some other process).
; S* E6 u4 c$ o a4 o M) ]$ F$ m; u0 h6 ?( e
modelActions = new ActionGroupImpl (getZone ());
& M/ ~! v. A0 Y( g: K4 X$ n) c( b8 \& v
try {
% A0 u' U; B6 ^ modelActions.createActionTo$message5 A/ I& D/ E9 w% `( j( Q ?1 u
(heat, new Selector (heat.getClass (), "stepRule", false));
$ z0 Z% I0 p4 s0 x4 N" ]! m } catch (Exception e) {
' ~. E: Z/ Q: \* q+ v4 V System.err.println ("Exception stepRule: " + e.getMessage ());
5 V7 `" K8 O' c }
: ~: m0 D% _0 c2 Q$ M+ A
0 M! ~( q+ T2 P, {4 | try {8 Y: P0 U; d% V4 T
Heatbug proto = (Heatbug) heatbugList.get (0);
0 ~) f, X: g4 M! }3 V Selector sel =
! C9 b, Q9 C% h& T, V6 f2 E new Selector (proto.getClass (), "heatbugStep", false);
/ t6 c9 I1 D0 ?/ ? actionForEach =+ N+ g ]( m( j/ b) w. X/ o
modelActions.createFActionForEachHomogeneous$call! Q# ~# D0 | B$ x3 u7 g1 ?% T
(heatbugList,
6 H( `+ J" D1 i/ u R new FCallImpl (this, proto, sel,
- M1 i9 z9 ]: _/ U2 ^ new FArgumentsImpl (this, sel)));. K1 Y" j0 B! f/ E: K5 w# q; U8 U
} catch (Exception e) {4 y/ ]6 A! T8 Z) a* {
e.printStackTrace (System.err);! z/ |9 N& k# o$ a) ]
}
# M0 R! w2 W, i7 K N! C" A+ K; e2 I
syncUpdateOrder ();
; P3 h, v e7 Q* Y& w
! s0 L& S4 M8 Y5 L! m5 G X0 P! O try {
# u1 y5 u6 U- E4 t modelActions.createActionTo$message 4 T2 _" T4 h w8 `" x! ^
(heat, new Selector (heat.getClass (), "updateLattice", false));
; }) s L6 }' ~1 C1 h; D } catch (Exception e) {
, `* k, }: r2 b" W9 b System.err.println("Exception updateLattice: " + e.getMessage ());
2 s+ j7 h+ \& S8 V& ~' ^1 U }
# E ~8 E) \+ ^: I+ V 1 F) z. _3 s9 s# B! T. G j
// Then we create a schedule that executes the
X; ^9 Q, I. e E% b3 w // modelActions. modelActions is an ActionGroup, by itself it5 t( _! b6 |" c5 U
// has no notion of time. In order to have it executed in4 ^+ l* `0 Y: G# [
// time, we create a Schedule that says to use the6 t3 R) `- R+ ?4 [
// modelActions ActionGroup at particular times. This: M7 V/ v" r7 p, f/ j$ M9 o
// schedule has a repeat interval of 1, it will loop every
0 v5 H4 s# S O8 \3 T1 x // time step. The action is executed at time 0 relative to
3 K/ D* K$ |$ G // the beginning of the loop.. g+ _0 _7 _# \7 M
- S3 }, i3 v6 C& W // This is a simple schedule, with only one action that is
' w9 X" q' Q: V1 i // just repeated every time. See jmousetrap for more+ T2 J+ ~1 ?: [& T. i8 N5 _; p1 d3 F
// complicated schedules.# w: M: a- j$ a
- x' j/ _4 W9 v0 h$ E9 C modelSchedule = new ScheduleImpl (getZone (), 1);
& Q3 ~4 t' L5 i modelSchedule.at$createAction (0, modelActions);" x6 ]9 ]2 {! e V( K
- [6 p+ u0 |0 h
return this;
9 m. X8 S0 Y1 ?4 n1 ]0 D } |