HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 g q" |& J+ A) q0 I' q4 v" Y7 B, J
public Object buildActions () {. n3 r4 [& _! \3 T
super.buildActions();
; q3 e0 Q: ^9 k) n- K9 P( F8 q8 h ( Z% H% V8 k4 o% f
// Create the list of simulation actions. We put these in
9 ?4 j, X4 D+ U; [6 H // an action group, because we want these actions to be
0 L1 B, c+ d1 m' y2 ] // executed in a specific order, but these steps should
$ y' ~, s: d0 s W3 R% F // take no (simulated) time. The M(foo) means "The message, W8 h+ V! Z1 ^
// called <foo>". You can send a message To a particular+ I. f: w) D1 T9 a
// object, or ForEach object in a collection.4 f2 t4 T1 C( r8 z+ N# S
5 B9 ^3 r" p6 M/ R: s // Note we update the heatspace in two phases: first run8 B4 B) i8 w- l: _+ i9 b; k, R
// diffusion, then run "updateWorld" to actually enact the# W$ L2 ^9 t' k' k8 X9 M
// changes the heatbugs have made. The ordering here is y9 t" N% l* C0 Z
// significant!, l. [5 v# d+ L2 W" T6 P( R6 o- b
6 @* h/ p: i. k% F/ W9 F // Note also, that with the additional- t9 p k2 E$ d5 Y( w @
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; l; K4 \3 Z. F- S- j // randomize the order in which the bugs actually run
d r/ m% O! b // their step rule. This has the effect of removing any
* d1 m! _; N" U; q1 b5 d5 n9 ]8 l // systematic bias in the iteration throught the heatbug
# V; i$ M' d3 i+ {* R, R0 D7 W7 y // list from timestep to timestep9 S( C' [& J9 Z! l% h
) B" H0 Z8 _9 ~% w
// By default, all `createActionForEach' modelActions have
" |) V9 Z; T6 R3 X. T // a default order of `Sequential', which means that the
6 j) ]+ }' H9 Z0 d: Y N // order of iteration through the `heatbugList' will be+ B& ]* p1 S; ]* l6 e
// identical (assuming the list order is not changed! w8 u+ o+ z- l5 e: @' }
// indirectly by some other process)." ^3 } y8 N Z' {1 n
2 ?9 {1 |3 T: t# F# l/ I modelActions = new ActionGroupImpl (getZone ());* B5 O" F% j5 m! h" ^9 p' p+ W
3 T! O$ {( r, a; v, ?$ F5 Q try {& g! b, f0 v% I+ O
modelActions.createActionTo$message8 x! Q. O: I9 }3 {, Y9 j
(heat, new Selector (heat.getClass (), "stepRule", false));
' ]- B; l& \5 t. G6 @4 w: V } catch (Exception e) {. v' ]7 C, U+ Q. l! D
System.err.println ("Exception stepRule: " + e.getMessage ());
, l/ C$ I' N, f) M1 o6 t2 z. U1 Q0 _+ c }, O5 Y( S$ e) Q8 R3 Q
# B# ?3 ^# S, } Z! o, J( @! s try {
7 ?% n; Y# h! r8 B S5 V Heatbug proto = (Heatbug) heatbugList.get (0);, z# c: Z- |7 _, W
Selector sel = 7 N* ` `. G2 a1 j% Z4 e
new Selector (proto.getClass (), "heatbugStep", false);
, N/ r$ R& U7 x4 V& l" s actionForEach =
; D. R) w( p, u/ q0 z0 p4 P: C# W: u modelActions.createFActionForEachHomogeneous$call9 Y9 G; D" r' [
(heatbugList,
. d# m& h( M( U( H new FCallImpl (this, proto, sel,
4 D$ Y4 ], w! z6 { new FArgumentsImpl (this, sel)));
6 s: o( o* A/ Q3 @+ Z$ h } catch (Exception e) {9 \: I2 x% W. L9 n; \) C
e.printStackTrace (System.err);
! }( J$ u+ n a6 S }
6 U1 R* p% p& i; E9 X
* L) I0 B4 s0 B5 ?6 f2 D) a6 R syncUpdateOrder ();
M; D; `& f' _8 w3 }- S6 r3 M
9 |/ X% L8 Z$ T; W try {
5 G/ @9 a* {% R# c modelActions.createActionTo$message
. e$ ~! f; q! {3 J (heat, new Selector (heat.getClass (), "updateLattice", false));% X" T: V. t1 r* b8 y
} catch (Exception e) { J% l7 ~) N* V2 v& a) S3 ?7 Z, X F% ~
System.err.println("Exception updateLattice: " + e.getMessage ());) Y* j& B) f, T M# [9 W9 b
}* n- n& M/ M1 q6 C* w0 w$ O5 V
0 K6 C1 ^& I, o3 J3 m/ J5 { // Then we create a schedule that executes the
# i3 J1 ]" {9 ^/ W/ \ // modelActions. modelActions is an ActionGroup, by itself it
. c& i/ G& B" w9 w D // has no notion of time. In order to have it executed in
5 @7 Z. i6 `! P; }1 I // time, we create a Schedule that says to use the2 J+ L$ F( P3 ]+ O
// modelActions ActionGroup at particular times. This/ J3 g& ?0 U3 U& D+ l
// schedule has a repeat interval of 1, it will loop every$ T. T' l, Z6 ]; _5 G0 j- l. e/ z
// time step. The action is executed at time 0 relative to! f8 Y, v* v% Z$ C
// the beginning of the loop.' V& O2 R! U3 O0 d: z
9 F/ w3 D6 u _4 G" [' [ // This is a simple schedule, with only one action that is, |2 s' n, m" T& i# J5 F
// just repeated every time. See jmousetrap for more
: _2 n9 w/ u6 |! w3 K/ @' b // complicated schedules.! H& F i8 P/ V' N
* ]8 E9 T, t# W modelSchedule = new ScheduleImpl (getZone (), 1);9 o- O' m% T" V3 p& ~. D1 m! [& T
modelSchedule.at$createAction (0, modelActions);
( |; u8 V+ k0 Z9 H( a7 Z9 h $ ]+ n! Z& w7 t( u2 U% c+ d
return this;
* s0 Q7 ]4 M: @8 l% B# Y2 \& N } |