HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ F+ S4 r" ]; t/ I+ W! x0 |* ^1 b2 h) T8 u$ L1 Y
public Object buildActions () {
" \- k# h! j+ G8 K L+ o. N5 [4 f super.buildActions();
C2 }! x4 ]/ i8 w) ^/ z5 ]& q0 @9 v
/ s& v) [& K; k7 A( f6 i // Create the list of simulation actions. We put these in1 d& ]: k! z( ]
// an action group, because we want these actions to be
1 e: m9 d7 P J& L- ? // executed in a specific order, but these steps should9 f7 ]- g6 L* e1 Z1 `2 n
// take no (simulated) time. The M(foo) means "The message
# J# J9 t$ G2 H- Z- p // called <foo>". You can send a message To a particular
. H% ~3 H; X6 c H% T L# s // object, or ForEach object in a collection.9 w0 T9 }1 e: Z# e3 S2 X& d
8 Q. @; L$ `- l1 F // Note we update the heatspace in two phases: first run: f: U% D4 z) R3 c
// diffusion, then run "updateWorld" to actually enact the# R4 Y/ a8 u& ]$ g; s+ b+ P# x2 b( a: S
// changes the heatbugs have made. The ordering here is) {- ~+ a0 m# ]# S
// significant!! C9 M, [5 W+ Y: V% |
; e- v. d: _& E5 q: m: L: K // Note also, that with the additional) s% r& q1 ~: U; U N
// `randomizeHeatbugUpdateOrder' Boolean flag we can n) q' w* o; F1 i: `8 ^
// randomize the order in which the bugs actually run! O/ u4 E- \ H4 U: ~
// their step rule. This has the effect of removing any1 W+ y. d5 N; z- T2 a. \* @1 L
// systematic bias in the iteration throught the heatbug1 B. o9 |) n- [4 e) Q
// list from timestep to timestep
! B& }' w+ I; x( E
( a3 a& h; G3 j% N! ?6 V7 C2 @; K9 f2 c // By default, all `createActionForEach' modelActions have
" }/ V7 b$ f% X' o1 u% R8 S // a default order of `Sequential', which means that the
^ C1 }+ A$ g w // order of iteration through the `heatbugList' will be9 _- ~" K8 H0 K
// identical (assuming the list order is not changed
) N* g/ z8 d6 y% F7 w // indirectly by some other process).
% @+ R6 k0 \; W4 A, @) x * U4 r9 h0 N8 x, [8 E" e" f+ J
modelActions = new ActionGroupImpl (getZone ());/ ]2 x( H5 l' c% H
$ Y( |* s) ]: R6 Q5 d, k$ j
try {
5 @1 V: A% Z/ V; [6 N9 Z$ ?( \( H modelActions.createActionTo$message0 {$ V \ j$ \3 s
(heat, new Selector (heat.getClass (), "stepRule", false));! P3 V. Y! M4 {" ]6 K
} catch (Exception e) {
( F$ L3 e( u8 u9 G System.err.println ("Exception stepRule: " + e.getMessage ());# c+ T6 T e, X! `
}0 e& {) t) c$ E1 V f& M; G7 b
! W) o4 M( P: ^" K2 N' x: l! A; Y; p
try {5 j1 w. B+ S5 v
Heatbug proto = (Heatbug) heatbugList.get (0);! C8 j1 [; `* b0 _& p: m
Selector sel = 5 u6 _* ~& T2 y) o
new Selector (proto.getClass (), "heatbugStep", false);
) y6 \ Q; [2 e actionForEach =7 k$ P/ e/ J/ f
modelActions.createFActionForEachHomogeneous$call
* Z# f# P. X" i4 h$ y6 R1 m (heatbugList,9 @9 G% y. l; Y9 Q! W
new FCallImpl (this, proto, sel,
& v5 D& }1 `1 g3 l new FArgumentsImpl (this, sel)));
; {: B9 `; J. L" s/ S } catch (Exception e) {
) j8 S7 y5 Q3 |" B( a+ a e.printStackTrace (System.err);
( T. b9 f' y4 O: T8 W% Q& t8 E. | }
6 u! q4 |8 h* [" V: O: v: B7 J
& S0 f) P1 x" W- l1 L syncUpdateOrder ();8 C5 l% r! b$ t3 K' c
& C& i; L9 R' M, F* l4 Z' S! s) W: c
try {& d$ ^, U4 E! X' ]5 u% _% y7 B
modelActions.createActionTo$message
& M$ d! ^: M! w6 |& V- S) a (heat, new Selector (heat.getClass (), "updateLattice", false));# k* O h$ M g: G* Z
} catch (Exception e) {
. K' g: w. r* L' ?7 ?. S n System.err.println("Exception updateLattice: " + e.getMessage ());% d& B& H5 v7 c) I( K+ r
}, p1 x$ ?5 l+ o- _
! S+ R% m" x- {; w$ |. A, [
// Then we create a schedule that executes the* i( @' d6 t1 ~( l
// modelActions. modelActions is an ActionGroup, by itself it. f5 ]5 ~3 a/ i- S
// has no notion of time. In order to have it executed in' z* u6 V+ e; g( U' C/ u4 g
// time, we create a Schedule that says to use the
% R4 S) E3 w* G7 Q2 ]* ` // modelActions ActionGroup at particular times. This5 X/ i% X1 `# x1 U3 c: ~: C
// schedule has a repeat interval of 1, it will loop every' E; Y& W7 Q) p7 c: B
// time step. The action is executed at time 0 relative to
* ~' m% P- g# o: H3 m- l$ w // the beginning of the loop.
7 C) O+ |8 V$ A& `% M7 `4 [. \" ?: U$ [/ F
// This is a simple schedule, with only one action that is
- ]! R y7 m. y* f8 d4 P: j. D: x // just repeated every time. See jmousetrap for more
t2 |8 q; E2 P& l, _$ q$ A2 U1 E // complicated schedules.
) m! c# `4 J) ~& V8 d $ q. Y" r1 f6 ]4 P& y
modelSchedule = new ScheduleImpl (getZone (), 1);: ?) ^) ]; y8 ^4 O* N
modelSchedule.at$createAction (0, modelActions);
" z3 |0 [; e+ R d6 P 0 o6 c, i: D) A4 { ]
return this;
# q E% Y" w& ~8 h/ p } |