HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 G5 Y+ b/ b% z; z6 D3 ^5 n7 N; k4 F, {5 _- O3 ]' z0 L1 ~3 v
public Object buildActions () {
- Q. N. D* ?$ _7 v super.buildActions();
7 M" f0 }3 R9 s' Y
6 w, T9 W9 @# x // Create the list of simulation actions. We put these in
% l- Q8 _! a* ^; U4 {" D // an action group, because we want these actions to be
N4 ]% `$ d/ S( l2 a // executed in a specific order, but these steps should
6 V, U/ B/ R& z# p( V& p+ C // take no (simulated) time. The M(foo) means "The message6 J# L5 i3 T2 ?1 V+ y; k
// called <foo>". You can send a message To a particular
) e: I _2 p0 A/ o) B; S: w' R/ @ // object, or ForEach object in a collection.% Y( g/ A% P% V* u. ?1 r
& E& ?* O$ g& ? // Note we update the heatspace in two phases: first run7 v. H3 d' w0 S
// diffusion, then run "updateWorld" to actually enact the
+ i: ], ?4 R! m W // changes the heatbugs have made. The ordering here is
, W( Y8 q: V, X; e% X7 x4 Q // significant!
. u( W1 X9 i. P) f0 a
& s: ?' b, [( k) n& y: B // Note also, that with the additional
- k6 s" i* Z0 f. I // `randomizeHeatbugUpdateOrder' Boolean flag we can' w$ {1 S6 |. M; Y: z- _* y& h
// randomize the order in which the bugs actually run
' [& u1 B V1 _+ A9 K // their step rule. This has the effect of removing any/ u5 e \3 u4 o% a9 A5 D1 S/ _ S
// systematic bias in the iteration throught the heatbug
! B& |$ ?* a8 } // list from timestep to timestep& m: S: Q- o8 y4 Q; s0 H
( N) I3 X. L5 p J // By default, all `createActionForEach' modelActions have
5 L& L8 U/ v0 C& c) m // a default order of `Sequential', which means that the" u( w: r& h# G+ E6 e9 J
// order of iteration through the `heatbugList' will be
+ e: ^( c0 q. @! P% H, ?! F9 P // identical (assuming the list order is not changed
: q& r+ y4 B. [1 B( \ // indirectly by some other process).
- l6 h. }+ N' G% m0 r8 ~5 E$ w 9 L5 ?" K& ]# Q$ m
modelActions = new ActionGroupImpl (getZone ());* ?: I) S2 I: B; V4 F
$ w# n( O/ `" i' Y+ W# _7 G G- H. l8 ` try {+ M9 v1 P6 O4 h, x
modelActions.createActionTo$message
3 }* Y9 K' A% { (heat, new Selector (heat.getClass (), "stepRule", false));7 _5 V2 L+ Z) ]: m
} catch (Exception e) {
2 N. g9 C5 P. I& P' ^& m: v0 } System.err.println ("Exception stepRule: " + e.getMessage ());& c( V0 n) V6 `2 z# o; ?0 i
}9 b7 X6 Y4 b) j+ O- m8 P. D1 ~
3 X+ j1 D+ b0 U. p try {
% J8 R. z$ S$ q7 _' Z( }0 r* g; g% } Heatbug proto = (Heatbug) heatbugList.get (0);. X/ o; G$ f5 k
Selector sel = $ [% C j7 {3 y0 U7 T
new Selector (proto.getClass (), "heatbugStep", false);: ^' P+ `( L H$ I1 h3 I
actionForEach =: l% y2 ^( J; G/ T
modelActions.createFActionForEachHomogeneous$call
2 {/ d% P0 L! ^' W. } (heatbugList,
% D t4 f- f& k+ h" i# E new FCallImpl (this, proto, sel,
2 f! | n, d; y9 A4 V new FArgumentsImpl (this, sel)));
0 s9 `0 e3 z) Q- l! I: Q } catch (Exception e) {$ x. h# n% e6 g- G5 I# R
e.printStackTrace (System.err);1 ?. o7 I) _- m9 `5 c6 J
}
& p9 N- B- O- m8 f * U8 g$ W. w& P8 k5 C
syncUpdateOrder ();+ G0 R* [3 A5 ?, D1 S7 [
! g: i6 x! o- t; G4 Q0 Q
try {/ N% O1 M2 ~2 v
modelActions.createActionTo$message 6 J8 f0 l7 J$ F4 P& I9 ^
(heat, new Selector (heat.getClass (), "updateLattice", false));) ~0 f; ^. x6 b4 r( X7 x: v2 x4 N
} catch (Exception e) {
1 Q, U, e' R/ m1 ^ H' M7 I System.err.println("Exception updateLattice: " + e.getMessage ());5 R# q/ F, m) b$ i) Y- x0 @
}
6 y0 `% A% B- d8 n8 X* s+ m2 ?
/ V: k0 W! |7 W // Then we create a schedule that executes the4 j, _% n5 }/ R# n* v4 I9 A+ T+ J
// modelActions. modelActions is an ActionGroup, by itself it
6 t$ d; Z* D; D! A4 t // has no notion of time. In order to have it executed in* a$ ^( s7 b; d6 P
// time, we create a Schedule that says to use the
: v! u$ w/ Q7 ~7 V+ p3 M7 L6 U // modelActions ActionGroup at particular times. This
! e. U+ f5 N p/ o5 M2 N x/ ^( Z // schedule has a repeat interval of 1, it will loop every- r. s+ x) Q9 y6 V
// time step. The action is executed at time 0 relative to
, m/ V) a4 Z' E+ X) `/ s7 C // the beginning of the loop.
% z& a4 v1 O; ]5 n R. }0 y, c' I" z* D4 s( {
// This is a simple schedule, with only one action that is- N$ G0 i$ X( U% Z: w4 u; ?
// just repeated every time. See jmousetrap for more
; }& T- K: K/ Y+ a. g. y9 N3 T // complicated schedules.
8 Y& q1 u3 P: a4 z# r* Q( y7 A
, Z# H- q! r y6 b6 j modelSchedule = new ScheduleImpl (getZone (), 1);
5 A2 B1 r. |5 Q4 Z6 N1 g modelSchedule.at$createAction (0, modelActions);
0 m; t# O/ A9 P0 \& f- q2 P$ m& x
; O7 z8 h" `5 W5 @ return this;- q( M! N# Q& Y) c
} |