HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 }; r' @7 ?$ c6 M7 i, s) f1 ?. R+ ~5 N" h- v! i
public Object buildActions () {
: X! Z4 ]/ Z& t super.buildActions();! E" [( {9 a$ H9 J& [
/ Z! V0 @2 H; s/ c% A0 k# S // Create the list of simulation actions. We put these in
8 ?: {+ d. X6 T' @; Z, K8 z5 l! g // an action group, because we want these actions to be
8 I- K/ `6 k% D( l9 g9 H // executed in a specific order, but these steps should; r% v" j, L9 u3 T% P
// take no (simulated) time. The M(foo) means "The message
; ]4 {% s- g$ b( e // called <foo>". You can send a message To a particular p; K$ j7 B6 K7 }$ _
// object, or ForEach object in a collection.
o' B/ z/ \! R" }
7 e4 j4 o ^% c. A5 {. L // Note we update the heatspace in two phases: first run
8 q; }1 p" b9 i+ j" T6 e% c) [ // diffusion, then run "updateWorld" to actually enact the
4 s. m+ p$ Y3 i# v" U# `4 H* l // changes the heatbugs have made. The ordering here is
3 ^# j6 `& t; G; U8 q- X; y // significant!' I0 L* `7 N% X# I, Z
/ m8 }2 r2 A& V1 N0 p# x // Note also, that with the additional
* J8 r2 r7 O$ m // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 o0 a9 \2 X: x$ M3 x // randomize the order in which the bugs actually run) y7 Z7 K! D, h& [* D
// their step rule. This has the effect of removing any3 C% j7 o, \1 e, W$ k- \
// systematic bias in the iteration throught the heatbug/ q* L8 ]4 n9 y1 P* N
// list from timestep to timestep/ E2 I- [' f8 V# h
7 s) I+ I, A. e // By default, all `createActionForEach' modelActions have) [# R; a% G( T. b& x
// a default order of `Sequential', which means that the
0 h; ^" J& e# m7 L5 M1 X( E // order of iteration through the `heatbugList' will be t& \& U9 N5 z) @
// identical (assuming the list order is not changed
G' D0 t) k3 G: | e. n // indirectly by some other process).
2 k' |8 j1 v6 `$ K3 c 9 ^5 A* D' O. a/ Z3 h z- f- Z- k9 y
modelActions = new ActionGroupImpl (getZone ());& N7 i. x6 I0 n' U/ j
- ~: U2 A# \6 |
try {4 M! \2 U8 `6 M. I
modelActions.createActionTo$message
: D0 s) d) x" N (heat, new Selector (heat.getClass (), "stepRule", false));7 g; A! o, t: s& Y3 I+ f0 ~
} catch (Exception e) {2 H% A% G) M4 n. K
System.err.println ("Exception stepRule: " + e.getMessage ());6 v4 t3 l4 U* J; J5 w C
}6 P0 m% m. o* B, o9 u
$ K" N; d# r* M2 F
try { d& x) ] h1 g8 `
Heatbug proto = (Heatbug) heatbugList.get (0);9 D5 ^8 ^* _5 d9 R% J: J
Selector sel = 2 b4 L8 O- x6 W' @/ l6 j, T6 Y' v& h! t
new Selector (proto.getClass (), "heatbugStep", false);+ l) n7 \, ^$ Q) x( j
actionForEach =7 e; k; x4 y& K7 Z- @
modelActions.createFActionForEachHomogeneous$call
6 L5 X" O# N& f; K w (heatbugList,2 m1 j* k' [ R
new FCallImpl (this, proto, sel,
. Y2 ], l+ S3 K. V( O new FArgumentsImpl (this, sel)));$ @. P7 ]# l4 l$ x
} catch (Exception e) {2 a0 D! P9 R% T" E# N- x
e.printStackTrace (System.err);
& B- F4 g9 U4 H5 ]9 ^ }4 v3 u6 x5 k8 p0 H9 e
9 u! V$ N+ b: ?8 E syncUpdateOrder ();0 |3 T' t8 X* j& K0 Y4 j% R+ \
4 ~, [( N2 j- k! E2 ^& \7 M try {
+ Z" _( {# i# O; I O" e& B0 T4 {2 ]! H modelActions.createActionTo$message : N/ d, C- D( |; e
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ `' _: l- d8 K6 ~* G, R" r } catch (Exception e) {& ^9 t$ ]. N. Q0 D
System.err.println("Exception updateLattice: " + e.getMessage ());* _# y! D: [1 {! R% w2 u
}/ h: y* w, ?/ t' d$ h2 ~) T, z
# k7 P3 C! b! c- @- v. t. s! q4 t
// Then we create a schedule that executes the
# l$ O/ B+ q0 W' e0 g3 N4 j: } // modelActions. modelActions is an ActionGroup, by itself it2 k2 f9 s" t/ v5 L! y, P
// has no notion of time. In order to have it executed in
" g8 H$ @ @# _8 v // time, we create a Schedule that says to use the
' R2 N% n5 | n9 J4 K( J // modelActions ActionGroup at particular times. This
1 `8 d: _! J) [1 X3 C // schedule has a repeat interval of 1, it will loop every
; w* ~. p+ p( d+ m // time step. The action is executed at time 0 relative to9 }8 _; d% y6 {. {; T
// the beginning of the loop.
0 Z- K" \1 M8 D7 x7 s
. ?' L- \3 R% s' T) e, y // This is a simple schedule, with only one action that is
' j3 P, Y' x0 M // just repeated every time. See jmousetrap for more
* S ? T# \0 A0 j! \9 `6 B. Y // complicated schedules.* L! l7 q+ w$ Z0 _% ~
# K# G5 j+ C% o7 ]+ d# y+ ~1 B
modelSchedule = new ScheduleImpl (getZone (), 1);+ G j4 K. f$ r
modelSchedule.at$createAction (0, modelActions);, a5 i7 G( }; p+ ]4 J: R: j
# s0 O% ^4 k* r+ o5 Q return this;
- n: b" _) E- k9 I6 c) e } |