HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 C! u1 o7 H- O8 M9 X! C1 F
3 r) L6 q! s/ i( u public Object buildActions () {. Z1 Q6 n; x$ h& ~( J9 T
super.buildActions();
' O3 ?; j, f- k 4 j8 D. ^/ p5 E
// Create the list of simulation actions. We put these in
: v& f" b1 C& y$ `5 H // an action group, because we want these actions to be$ _4 {5 W+ E% H- _$ u2 T
// executed in a specific order, but these steps should
" g- m8 _) W. W/ {6 g // take no (simulated) time. The M(foo) means "The message1 }* I$ z; ]- B' ]: Y
// called <foo>". You can send a message To a particular
2 x0 h% k8 U; G // object, or ForEach object in a collection.
- W( x; `1 ?5 L3 j% {, X* e ; U- i F& x B; P1 F
// Note we update the heatspace in two phases: first run
1 D5 n7 U( G! j3 ~$ ?, h // diffusion, then run "updateWorld" to actually enact the2 C% C9 B' K3 Q1 [+ X* N0 e( b0 e
// changes the heatbugs have made. The ordering here is
( Z) \8 u9 l1 m7 H4 M // significant!
0 d) U q) m! Q) n' u3 M. X
+ d/ l; x; B& r // Note also, that with the additional
; z- `- D9 P: X$ N // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 I5 J: F# Z" D // randomize the order in which the bugs actually run
$ k' b! D) T' c. `9 [& n* R( k // their step rule. This has the effect of removing any8 a/ {% \4 d/ ?5 T* C( }
// systematic bias in the iteration throught the heatbug! T- \& d" T# Z: y( N8 I
// list from timestep to timestep
( E2 P8 L' ?: m1 j$ G; u ' {3 t6 d3 x; Y/ k' x+ M+ k+ h
// By default, all `createActionForEach' modelActions have
& j4 Z7 f/ n. d' m; W // a default order of `Sequential', which means that the
# Y8 b& n5 J( @ // order of iteration through the `heatbugList' will be" L7 x7 _7 e$ M1 m5 n( y
// identical (assuming the list order is not changed
1 z+ g% f' s8 h4 {, } // indirectly by some other process).! ?. Y1 L4 n$ ?; i( F
2 H8 t7 m& {, K7 m modelActions = new ActionGroupImpl (getZone ());
; S: o9 _" N( L7 V# y3 U2 F l9 Y- h% }
try {
% j) m) w4 \" j8 h0 P( q4 t, t+ ] modelActions.createActionTo$message9 R! z0 s. Y5 ^$ X; s- {4 ~/ w
(heat, new Selector (heat.getClass (), "stepRule", false));
. z& w- S4 z. h. E' v } catch (Exception e) {
5 x. ]8 M4 w5 t: w, C; r System.err.println ("Exception stepRule: " + e.getMessage ());
* Q& F, W- q4 P J }
" C9 W# q, }" i9 r
$ _! `" _$ n% L% h, e( z# ? try {! v. D! G& ^' F9 O
Heatbug proto = (Heatbug) heatbugList.get (0);) k5 ]8 |. e+ u" E: [9 l' A% d
Selector sel = 2 Q* T* ?/ k4 L( g9 {$ a
new Selector (proto.getClass (), "heatbugStep", false);: k# ]$ B* O0 Y) H5 G7 H( N+ `
actionForEach =
]& ^; c* ~7 c$ u modelActions.createFActionForEachHomogeneous$call B5 T3 }8 f# ], e
(heatbugList,
: a: m% Y! z4 B k1 h4 Y! a3 | new FCallImpl (this, proto, sel,
- l/ }+ ]. m8 d1 U) p" N# t new FArgumentsImpl (this, sel)));
0 K6 v& s2 k7 h0 C& ?% e8 p } catch (Exception e) {* Z) G/ Y K f7 A/ S8 N& l$ @
e.printStackTrace (System.err);) \- N+ p; V% r! I7 y5 N
}
- S6 x0 ~- X* q; t3 }9 M 7 A# J$ O& i" L/ z
syncUpdateOrder ();
1 Q0 P. n3 c' v! I7 }
2 v- r6 N# N2 V try {) X6 o7 J6 p/ j& g' \* E% e3 i
modelActions.createActionTo$message
1 Q5 o2 D7 a$ e0 x- y1 w( \ (heat, new Selector (heat.getClass (), "updateLattice", false));! Y/ g# X" y6 O; m3 N9 P/ ]# Z
} catch (Exception e) {. X4 y( w- i) k5 ?! E
System.err.println("Exception updateLattice: " + e.getMessage ());1 i# D/ R& l; T
}# u/ [8 l0 z6 I: N) m% C
% x! a$ N% r/ V+ _! Q
// Then we create a schedule that executes the
$ O1 W6 L' U0 a: ?/ H9 G8 r // modelActions. modelActions is an ActionGroup, by itself it& U6 C) k% Z* f1 o$ q
// has no notion of time. In order to have it executed in4 N0 D Z# U8 w& F$ R
// time, we create a Schedule that says to use the& x0 ]2 |4 e7 S, L6 `6 j. B+ w+ h$ ^
// modelActions ActionGroup at particular times. This
4 l- e" y3 {2 S2 l* G // schedule has a repeat interval of 1, it will loop every
a7 O+ z" q9 Y' k7 S/ _& _ // time step. The action is executed at time 0 relative to
# Q0 e! s, V; k // the beginning of the loop.
- Q- l$ W8 A4 U- h3 D
5 }9 B. j4 h: R4 g" J9 g // This is a simple schedule, with only one action that is
" H8 G2 Z4 ^3 B W8 K // just repeated every time. See jmousetrap for more0 l6 E: e. |: x# D
// complicated schedules., G( a& J m$ M* l4 k. u) a
5 Z' K) ?! w) w& a modelSchedule = new ScheduleImpl (getZone (), 1);
& f h2 [) K$ E: v7 J: T3 _& g modelSchedule.at$createAction (0, modelActions);5 |; q2 E/ F4 x# N3 Q
" g+ f! M* j9 U return this;
; I$ O0 A1 K8 f! b8 b } |