HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 |& L3 K3 ?: s. C5 o, {
- _0 J% Z- J) C
public Object buildActions () {
# t I) w6 l6 H( ?% w% X% Z super.buildActions();; A, j0 S" T) q2 f" k
$ ^8 \/ \ s+ V$ U' y, x // Create the list of simulation actions. We put these in9 A5 u1 h( `1 C3 }
// an action group, because we want these actions to be# t, v5 J6 Z6 G7 K
// executed in a specific order, but these steps should
5 L; |7 E2 N6 h; y& | // take no (simulated) time. The M(foo) means "The message
, l* l# {2 F. @. Z0 K( J // called <foo>". You can send a message To a particular
) M# ]7 j( S* K5 m5 \ // object, or ForEach object in a collection.
" F: w- z- R6 k8 ~' q# z
9 D) r6 K$ T' l8 U" w# j // Note we update the heatspace in two phases: first run
, M+ O, U9 H2 R4 _5 ~4 k$ L% b1 d // diffusion, then run "updateWorld" to actually enact the
/ o) y K5 H: e // changes the heatbugs have made. The ordering here is
" C4 A3 U1 i6 z& \- X, h // significant!- U0 d: Q. i, \0 U+ {) v- y/ ^4 ~
9 x0 D4 ^! i, f0 x& S
// Note also, that with the additional, [' e! m- N" d, R+ l
// `randomizeHeatbugUpdateOrder' Boolean flag we can
6 |. z: v/ g3 ~# U, E // randomize the order in which the bugs actually run! w0 k8 ~" R/ v3 {, X
// their step rule. This has the effect of removing any; z/ ?6 W( E! n! c+ F; p9 W. C
// systematic bias in the iteration throught the heatbug
1 K B6 Z7 v5 ^, v+ y' T // list from timestep to timestep& D5 u: ~3 b4 w6 s# H
$ I' F# v0 R, u9 H0 z // By default, all `createActionForEach' modelActions have" N% @. k& p! u' D
// a default order of `Sequential', which means that the/ ^3 _7 t1 Y& U, }% F. T
// order of iteration through the `heatbugList' will be
# e, q2 g5 l; m; y. N // identical (assuming the list order is not changed
( A2 u9 R1 t3 S# {+ C9 }3 l) w // indirectly by some other process).
. T3 ~5 W' f' s" H- R1 A( z . Y: c2 `* \! l% O9 h9 Q0 e
modelActions = new ActionGroupImpl (getZone ());
0 ^1 \2 K3 v9 o1 F4 k8 o+ @* o: s' s2 h! S/ I+ H. ^# y( O! Y, J
try {
+ K) @: O' S( O- j9 G7 i9 B modelActions.createActionTo$message1 r0 G& ^- I5 ?! z5 Z9 k! C; v
(heat, new Selector (heat.getClass (), "stepRule", false));: O+ a/ j w) e2 Y* q4 v, r
} catch (Exception e) {; G1 N* j" N3 ?/ {9 r- ]
System.err.println ("Exception stepRule: " + e.getMessage ());
: A* h6 R) I# L+ M$ G& {$ E, L }
) |6 w M, L: s# r3 b' `4 D+ G7 {; r3 j
try {& O, Y3 G& w6 y: o: o/ g' _
Heatbug proto = (Heatbug) heatbugList.get (0);# S3 X4 M( w, u8 J( o8 d
Selector sel = / [) j4 ^& R( s. f' o/ `4 L3 z
new Selector (proto.getClass (), "heatbugStep", false);
, b! x% b7 ?/ s( U actionForEach =
" O1 H! S$ o; @. F' a8 `! [ modelActions.createFActionForEachHomogeneous$call
. J/ Y: a% T6 }% k) s (heatbugList,# B B: i6 {3 `
new FCallImpl (this, proto, sel,
7 R* K7 w( E' v0 Y t+ F O2 _ new FArgumentsImpl (this, sel)));. K/ R# R% j0 x: `2 X. U
} catch (Exception e) {
/ Q0 y, U Z. {: u: `- z6 n* L e.printStackTrace (System.err);3 |" ^: a1 R9 H" k& S: l
}
- c3 f& M# y* F5 I* v3 X' ~
~4 |- A/ p# Z* D4 S; H syncUpdateOrder ();7 M% @& Y6 p2 s+ p# t
T- U7 D+ x# X8 e
try {
" d: B6 j7 p2 @ modelActions.createActionTo$message ) @) t5 v' F/ g& P
(heat, new Selector (heat.getClass (), "updateLattice", false));
$ _, ?6 E& z0 { } catch (Exception e) {
% c8 ~- S) g, r5 l( Q System.err.println("Exception updateLattice: " + e.getMessage ());
: P7 N9 M0 i+ l4 V8 ]6 u6 [; x }- }- u9 [+ {: q, \0 l: N6 @
/ E5 m r$ j! I: ^; @1 T // Then we create a schedule that executes the
) m8 R! `' }; e1 U t // modelActions. modelActions is an ActionGroup, by itself it
. f- I: t, h2 a7 B) L // has no notion of time. In order to have it executed in
3 F) P# R! T* @% }8 c: J2 E // time, we create a Schedule that says to use the% h q6 X) I. b0 H G1 T/ u
// modelActions ActionGroup at particular times. This0 _( ]+ z. d; t
// schedule has a repeat interval of 1, it will loop every( `# ^# Y7 r; y
// time step. The action is executed at time 0 relative to
( k) L7 B4 o. \2 J$ S) \ // the beginning of the loop.7 i( u" j+ Y4 `
4 U0 R# o& c [7 |( n // This is a simple schedule, with only one action that is
0 i! O% B$ I# i. [6 u, J // just repeated every time. See jmousetrap for more
8 m( k2 C( ]) C7 t8 l E // complicated schedules.7 r% U- X5 T4 _$ W5 r& \
- K2 ~1 O: E7 C( B
modelSchedule = new ScheduleImpl (getZone (), 1);7 J4 k* t) ~& U" Y6 [/ h9 m
modelSchedule.at$createAction (0, modelActions);% k3 Z" ]% Z' R+ X
9 `# |7 [8 K n0 V2 n" m
return this;6 c( n, s' d, @* E; i
} |