HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- h; ?! v) ^* z
) U2 e0 B$ {5 p0 |# X8 J public Object buildActions () {
; L0 C5 {5 l c: |4 f super.buildActions();
: J% t; f& ?% w, Z% ~0 S. N ' v. c# @* S6 m! ]7 x
// Create the list of simulation actions. We put these in
5 o+ E8 Y3 ?4 F b // an action group, because we want these actions to be
, b! L6 w1 K* p2 E* r. U, l1 V // executed in a specific order, but these steps should
" [- s$ I/ y1 D- s, F // take no (simulated) time. The M(foo) means "The message
( l6 m. ?& ^6 _6 Q // called <foo>". You can send a message To a particular
4 D" G# u+ ~) b% M0 W" X // object, or ForEach object in a collection.. E+ l( E9 U. @6 G9 S
2 h( F1 x+ s2 J7 U* [ A. V! H
// Note we update the heatspace in two phases: first run% @4 T" X+ D3 D' j8 ^0 N9 E
// diffusion, then run "updateWorld" to actually enact the
5 P2 Y3 x* t |$ T; B* }" t // changes the heatbugs have made. The ordering here is
* d- i' a# a3 `& q& q // significant!
% k9 b& \! S8 |* z # b. t: w! |; t. X! I( y* `
// Note also, that with the additional2 t7 o+ H: |+ z* ?( W
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# P" X0 ^( ^1 s0 D4 y( a# k // randomize the order in which the bugs actually run
% Z( a% {' m p2 c F // their step rule. This has the effect of removing any7 k2 P6 ]1 }) A# u, O
// systematic bias in the iteration throught the heatbug' c1 ?' p% n4 Z; A
// list from timestep to timestep
0 ]* k- r6 R5 b5 v ) \2 J. _0 m9 ~: M
// By default, all `createActionForEach' modelActions have5 q8 j8 F: E1 W" y m
// a default order of `Sequential', which means that the' N8 L8 Y; Y) \1 X
// order of iteration through the `heatbugList' will be
6 T6 n" @# M' V' c' V/ { // identical (assuming the list order is not changed
: { T, c6 } |. N1 @" ?* ^ // indirectly by some other process).
+ o z( w e8 y! g/ T$ S 9 {; x# @1 M" ?( T3 |( D
modelActions = new ActionGroupImpl (getZone ());, B4 _3 u) g& M; ^" N. }1 g2 A7 ^4 f
% l# U' Y* _2 c: v& K: X4 s8 a; { try {2 ~8 u( e! R: a& D& s' M
modelActions.createActionTo$message
/ l8 H% w! m( U J7 M$ Q (heat, new Selector (heat.getClass (), "stepRule", false));
, O1 m! g2 ~$ e; j- D } catch (Exception e) {4 }5 N; e3 q- p, a% D: z
System.err.println ("Exception stepRule: " + e.getMessage ());/ ]7 `/ s5 A$ k* k$ J; Q$ x/ N
}7 n% A/ w2 K/ |. @4 J
. k1 M: t3 l( i2 l7 R/ i' }/ c try {. C. q6 L' G1 |, }; S; z/ [
Heatbug proto = (Heatbug) heatbugList.get (0);
' u" E8 [( f4 @+ x Selector sel =
$ Y, c( p: h: ] T new Selector (proto.getClass (), "heatbugStep", false);
7 G! _' x+ C0 Q7 F* h/ E* P+ n actionForEach =
) S& M9 Q' K/ w& K9 H/ y+ K modelActions.createFActionForEachHomogeneous$call$ y/ o% l4 M* {& x. i0 g8 {2 `6 p' p
(heatbugList,+ N) f0 Y' ~; ~' `% q5 k! |5 ?2 e
new FCallImpl (this, proto, sel,0 ?2 F5 A" Q/ k+ `2 {3 ~
new FArgumentsImpl (this, sel)));
* h- t5 I7 o: [ } catch (Exception e) {) V: k3 {0 K- q; G" V
e.printStackTrace (System.err);) J( a, G3 x* Q6 \% L8 e
}
2 M& A; g! T7 r; l- Y+ P
; e" z$ T* \# o$ \! t% i7 v1 f syncUpdateOrder ();4 N3 R7 s ?: f
3 @7 |$ B0 U- L/ I4 F' l( i' h try {6 c2 J8 f; d' Y5 W" o
modelActions.createActionTo$message % @( L" i2 U2 Y' A# K% p- M
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ H* g/ }! z1 i, D9 s } catch (Exception e) {
) q4 I. v" b- Z8 U; l- p System.err.println("Exception updateLattice: " + e.getMessage ());
8 I; Y7 t! f: L7 B9 E }
s+ e/ j4 v$ ?- K* a
* D+ }7 C( K8 @/ f. d& [. X // Then we create a schedule that executes the
% ^2 Q' F5 y' [; x // modelActions. modelActions is an ActionGroup, by itself it1 C- p3 q! o3 d4 C) X! r
// has no notion of time. In order to have it executed in
2 f& i# k+ ^7 l1 _# ~ // time, we create a Schedule that says to use the4 ?2 H7 ?1 U0 y9 p+ h. z
// modelActions ActionGroup at particular times. This
/ X# w3 k H& d // schedule has a repeat interval of 1, it will loop every* g5 K2 {: _3 X0 L4 [
// time step. The action is executed at time 0 relative to# r: ?% _+ b* f* O6 n) U" o
// the beginning of the loop.
8 r) h! G1 W* y! H
' ]0 ~! k0 t* V3 f, ?* _( l! k // This is a simple schedule, with only one action that is$ P4 c: j; K1 _9 c2 V
// just repeated every time. See jmousetrap for more
( g9 {7 X1 P0 j, }8 |& R1 b4 S: k // complicated schedules.
: q& Z6 v+ X# b' K1 X, n" F 1 E2 b7 ]7 R$ q" i. S
modelSchedule = new ScheduleImpl (getZone (), 1);
: l3 l! N" T; Q* c modelSchedule.at$createAction (0, modelActions);. a) P% N; q( ~, ?, }! |7 R
+ u% F2 L* _: G, ^& G& i return this;4 {. g2 G+ R7 E& l' b3 m
} |