HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; O/ N# {/ j/ T0 P9 C* O
* b' R6 r+ |! d" b8 C public Object buildActions () {
# l7 R T' z4 c; X; s$ s super.buildActions();+ V$ o) a+ R- o# u _ a4 f+ @' \
6 n1 h7 `) a( f2 H+ }4 K
// Create the list of simulation actions. We put these in- _2 ~! O2 C0 h5 V+ Y2 I
// an action group, because we want these actions to be
3 s7 z0 n7 W2 e // executed in a specific order, but these steps should; p( I/ u) u _0 o+ ~7 O
// take no (simulated) time. The M(foo) means "The message1 {; `* K Q! w. e* _* M
// called <foo>". You can send a message To a particular' J) n: ]3 ~. G+ q. m
// object, or ForEach object in a collection.
/ `% X( n8 y; N, D / w/ `* l- n. j$ ^$ @ M! K2 O
// Note we update the heatspace in two phases: first run' F O5 \/ ]1 E+ j
// diffusion, then run "updateWorld" to actually enact the
7 R1 W# L x- q' t( ~5 e6 p) u // changes the heatbugs have made. The ordering here is4 b$ y) j2 i% O
// significant!
6 k: ~1 P* f( F _1 ^' w7 L0 |* \ , `3 J2 f! ]9 e- [; j; t
// Note also, that with the additional) | f5 T9 F7 e/ I- S, s; i
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; r+ c R$ g" N& `+ F' R' c6 G // randomize the order in which the bugs actually run
" P' |8 ^+ |2 j( i0 w7 u/ | // their step rule. This has the effect of removing any0 g. g# Q; |7 M
// systematic bias in the iteration throught the heatbug+ z# b ]8 k+ B, D( d/ f
// list from timestep to timestep! l: w7 y- q ^0 t o7 M
+ v4 z. ?8 T' b6 b5 D4 z
// By default, all `createActionForEach' modelActions have
9 P- W: H$ Y/ @+ U. t8 a // a default order of `Sequential', which means that the
6 I. B' R+ c' W // order of iteration through the `heatbugList' will be$ \% p) O. k/ B) G7 C2 T9 m
// identical (assuming the list order is not changed
1 K9 o# \4 P/ h# q // indirectly by some other process).5 L1 r" w. e- ?* s8 f7 {" ^
: Y7 Z0 Z$ @7 G8 E' {8 j1 y" G$ I
modelActions = new ActionGroupImpl (getZone ());
0 w9 S6 W+ Z/ |) W8 Y7 l' `4 S. L7 x, A2 p. N5 X6 j. [; m
try {) f6 Q4 G6 P: t& }* p
modelActions.createActionTo$message
_6 X0 R$ ?: |. f1 G' k# d2 p% S (heat, new Selector (heat.getClass (), "stepRule", false));/ }' h3 Y# r% p! }
} catch (Exception e) {, \! S4 _" a$ L6 J o$ i
System.err.println ("Exception stepRule: " + e.getMessage ());/ D: g4 G5 A) E
}3 f6 t$ T. Q7 |0 M8 F I
! X4 S+ C4 Q p6 x3 V" g try {
; n! Z, W( y) G0 ?' Y2 k i Heatbug proto = (Heatbug) heatbugList.get (0); j4 J/ K, J" @
Selector sel =
+ v, X+ E1 R6 m* { new Selector (proto.getClass (), "heatbugStep", false);
7 T# l) [+ \/ q actionForEach =
) {3 R7 K1 U5 J% v- P* ] modelActions.createFActionForEachHomogeneous$call& S9 V9 l8 R- A4 |
(heatbugList,3 ^ e. W& z+ a2 N! f) G' I# b, o
new FCallImpl (this, proto, sel,
0 Z9 r! x" e/ [3 Y new FArgumentsImpl (this, sel)));
' z+ Z4 K# ~- I } catch (Exception e) {6 ~4 b6 c' h9 d/ z; `$ }- ]6 v8 f; u0 V
e.printStackTrace (System.err);
( Q: U5 H* A8 N: W }
+ B# M! \: E. ?: b7 a# I 7 d* O! h* C# }* V
syncUpdateOrder ();$ Z8 q" C3 R$ Q% G
/ R; z/ B6 O- O# V5 ?1 K. R try {( U- n- {3 U# v7 O2 u. @* }' `! h
modelActions.createActionTo$message % |8 X- n3 P$ Z! ~ _ T1 ~4 F& x) j
(heat, new Selector (heat.getClass (), "updateLattice", false));8 U7 w0 {4 C; I! k$ r
} catch (Exception e) {
' m& i+ z+ P0 X' M1 I System.err.println("Exception updateLattice: " + e.getMessage ());/ r6 j+ M- _: Q
}$ f" T4 h" |4 ?5 E% b: q9 v
5 ~4 U, D9 v+ E; N
// Then we create a schedule that executes the
9 ~& V8 e0 v e- W3 t // modelActions. modelActions is an ActionGroup, by itself it
S9 \. N& d9 K8 w5 @! p7 x$ L // has no notion of time. In order to have it executed in
7 N1 M* o# X9 w. p* q // time, we create a Schedule that says to use the. A/ t- W6 S( q2 e% h: D) P
// modelActions ActionGroup at particular times. This+ C5 o% Y* V3 ^/ p1 j: Z% }) h$ o- y
// schedule has a repeat interval of 1, it will loop every( B' _' [2 ^5 X
// time step. The action is executed at time 0 relative to
b- ]" Y# \7 Q. j+ f/ Q/ X, V b // the beginning of the loop.
_* W) D) I* v) \2 [$ T L+ u" c5 w5 y: B# [
// This is a simple schedule, with only one action that is u( J) ?0 |2 Q( C$ i, }
// just repeated every time. See jmousetrap for more
) M+ J' K( O8 g7 b+ E ]0 H // complicated schedules.1 r2 x$ d1 a! t. W! `1 f
7 h. N( |: g$ n modelSchedule = new ScheduleImpl (getZone (), 1);( k5 V' f7 K% ^) M9 [* e9 J0 a
modelSchedule.at$createAction (0, modelActions);
, w- V" v8 Q/ }+ Z- |
! F) J0 G2 N# j$ d' W9 F return this;
# F) k# G9 P; I; k } |