HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 @- L* V! G8 r
0 I8 I) B% W; |2 Y. c8 e" ^ public Object buildActions () {) d4 O( k* i) A/ Q+ y- y+ v- O6 J
super.buildActions();( W# e7 n6 i/ }! d+ O# e2 H
2 l3 J+ Y5 T4 S, z7 K // Create the list of simulation actions. We put these in* W1 ]) g( M3 O
// an action group, because we want these actions to be
- g2 m) t6 r4 [# y' K1 k7 `( e // executed in a specific order, but these steps should
1 a4 F. \* n. u! t# x8 T // take no (simulated) time. The M(foo) means "The message* Y' M' s6 Z2 q) b+ x
// called <foo>". You can send a message To a particular0 |( |2 K( ?* w
// object, or ForEach object in a collection.
! g; S* J: D4 }5 M; j k+ X 8 V' H( H' Q6 V# p J, N
// Note we update the heatspace in two phases: first run& e* b, e/ b: \5 `
// diffusion, then run "updateWorld" to actually enact the
9 ^! I5 X5 M5 B7 o3 F' h! v // changes the heatbugs have made. The ordering here is& \8 `( w2 c( f8 O7 t0 B* \1 Y# B
// significant!
4 E! I: q7 u. c/ R, H: L 7 w6 q! \/ v% I; p; a
// Note also, that with the additional5 n% `: i* u+ _. I- f
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ h, s6 O0 q$ g' T' T g
// randomize the order in which the bugs actually run
- M) ]" Q3 p3 S) ?0 K // their step rule. This has the effect of removing any
- \% _6 g4 s. I // systematic bias in the iteration throught the heatbug
; A7 s7 a: b4 q8 `% w3 l1 F // list from timestep to timestep% R) U5 y0 f/ r& ~. M% b( Q v( I7 J
. T6 U8 \; I; H" x. U8 Z
// By default, all `createActionForEach' modelActions have
' _ V% N7 \( G! @! |: Q' N' C5 B# O // a default order of `Sequential', which means that the% c3 D( ^5 w( S& U N0 s
// order of iteration through the `heatbugList' will be' |0 ], Q. J `6 c7 ?
// identical (assuming the list order is not changed$ |! u6 Y) X! Y$ w: K; j
// indirectly by some other process).; Z3 `3 K+ `& j. f- i
& _8 b" Z5 G1 {
modelActions = new ActionGroupImpl (getZone ());
0 i& ], K, W2 G. E& ^
; ~& u/ r+ z. {) U2 p/ l! m. I! n try {
# [ k& g9 f' a7 Q8 C R modelActions.createActionTo$message1 Z1 c } Q" c8 d! u8 k3 N
(heat, new Selector (heat.getClass (), "stepRule", false));
; V1 v5 }* ^; g0 r1 g4 l3 P6 ] } catch (Exception e) {
* C: W% i j9 @7 x6 I! |# [+ @ System.err.println ("Exception stepRule: " + e.getMessage ());" e( o2 A$ o M5 R2 s
}
* w! B: U6 o8 g1 E3 G- C7 D3 n6 @6 t: o% ^0 o O' t0 a9 g3 w4 o
try {% q& y5 ^8 Z! {# ^- O3 Y. z
Heatbug proto = (Heatbug) heatbugList.get (0);
x; u! B9 b3 l Selector sel =
# I' s5 i% |" [* [ new Selector (proto.getClass (), "heatbugStep", false);
, u, g( Y5 F+ o5 O0 p actionForEach =
, s% z; |6 V% o) Y modelActions.createFActionForEachHomogeneous$call3 U% G- E9 p( ^4 E6 G0 d9 f6 |
(heatbugList,
2 r! I1 \& b, D9 F( P6 n7 ?+ J new FCallImpl (this, proto, sel,
; F5 p+ r, w% @" o5 F new FArgumentsImpl (this, sel)));( j) \5 _) C- Z, T" u8 A
} catch (Exception e) {" o* Q; I) `! u7 r6 I7 ?
e.printStackTrace (System.err);9 e# b/ @3 S8 y1 R; h8 Y/ \) b
}
8 ~, L X; Q) |8 G" C
. i' Q# N- b, ^0 d0 F syncUpdateOrder ();4 x" K, u1 R2 C3 f b) J9 m9 h& ?
& I2 J; \ q" O. R4 T
try {
$ u* m% w% \+ v. d- z2 w- d modelActions.createActionTo$message z7 |$ |* \* ^( `/ ^7 C& [
(heat, new Selector (heat.getClass (), "updateLattice", false));
% L6 `! D: S+ c* p+ h; |/ Q } catch (Exception e) {
; g8 ^4 z( Y5 J% S System.err.println("Exception updateLattice: " + e.getMessage ());. k3 l. S% W1 S) a) s8 C. f
}3 c# m9 ?9 v2 G3 w4 O' _
# m$ D5 V/ x7 W" ~8 n3 l, I2 C // Then we create a schedule that executes the
' N; ^, b7 h: I5 ] // modelActions. modelActions is an ActionGroup, by itself it3 N& q3 M% v% N9 ^* M" F
// has no notion of time. In order to have it executed in6 f6 d' o8 A O) k+ z* g7 J% n4 u0 ~4 s* d
// time, we create a Schedule that says to use the
# H: @! x, }% g- x, D4 W9 d; O/ Y // modelActions ActionGroup at particular times. This; m4 o! k) d# H) n& O
// schedule has a repeat interval of 1, it will loop every5 ~* W' f) Q+ |$ I( w6 i+ H
// time step. The action is executed at time 0 relative to1 \, _! H! ~0 _( N, ]" _! E
// the beginning of the loop.0 `2 I" v6 I/ s! x/ W0 ~: h
9 G9 j" z/ | p
// This is a simple schedule, with only one action that is1 x# D3 @+ F8 z, n
// just repeated every time. See jmousetrap for more5 r6 @9 ~; D. L2 b; b5 _; w
// complicated schedules.: U- r) z7 N: O
2 ]+ a; p( }2 q* A+ M4 i2 L0 A modelSchedule = new ScheduleImpl (getZone (), 1);
, D+ v: r$ I" F, d( C" U modelSchedule.at$createAction (0, modelActions);
# r/ h; \ l( K5 H& k ' K: U9 L) A) e7 I$ ~
return this;
C2 P. s8 D' _# Z4 z } |