HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 U2 u$ z- T* b3 x% S
8 `! v( N+ K) I
public Object buildActions () {
! F9 f* h+ q6 y super.buildActions();
u9 o( p% a3 U C2 V2 J5 O : L! @, k) b) a+ R: b, d
// Create the list of simulation actions. We put these in
/ I9 `, ]) S# h% W# M+ C // an action group, because we want these actions to be# B5 w& h, r8 i- S+ y3 r
// executed in a specific order, but these steps should3 h9 [+ Z! G3 E4 c# X
// take no (simulated) time. The M(foo) means "The message
6 B9 f u$ w t P- f // called <foo>". You can send a message To a particular: l' r! E; d T$ \3 B
// object, or ForEach object in a collection., e/ b) Q7 \' ]8 v5 R1 M0 V
/ T6 x# r, o. O; i" D
// Note we update the heatspace in two phases: first run
: j! s: P6 B2 v' C# q, z' m // diffusion, then run "updateWorld" to actually enact the
2 |, |9 L3 C0 Y. H0 Q+ s // changes the heatbugs have made. The ordering here is. K4 |9 ~+ f! X/ y0 H& j
// significant!
6 d: s) x( g+ x
, V% s2 n& |9 y+ d5 Y' g4 H // Note also, that with the additional
@4 u# f8 F8 F, ^ // `randomizeHeatbugUpdateOrder' Boolean flag we can
! @3 J3 {; _- X" g Q7 H // randomize the order in which the bugs actually run8 W0 X* ^3 Z( |1 C7 W+ k
// their step rule. This has the effect of removing any
% L3 c$ T. E" a/ N // systematic bias in the iteration throught the heatbug0 k% v! z+ T( _$ m5 x
// list from timestep to timestep
& g) H; w3 m0 B R/ D4 H, d+ y8 \* D
* O* @% I; T3 l ~# ], g: S* @9 c" C // By default, all `createActionForEach' modelActions have# e" R4 x! l. G R# | u
// a default order of `Sequential', which means that the4 R: {2 j: W" r* Z: x
// order of iteration through the `heatbugList' will be+ E) Y' ?, p8 q5 p
// identical (assuming the list order is not changed
* J: k& o. L1 Q$ Z3 |) N4 y // indirectly by some other process).
" k7 y' G; Z0 F- a5 E/ m $ N* @" N6 `; C% \" K, ?
modelActions = new ActionGroupImpl (getZone ());
0 Z( s( U, e) E! ?8 ~$ d
7 c# l+ z3 u; q7 a! [) M, | try {
' [, n# @2 S$ P8 r" l1 J modelActions.createActionTo$message
- Z- J% b+ L. Y; m7 m+ T$ h (heat, new Selector (heat.getClass (), "stepRule", false));
# X5 ~4 n5 N: i$ d H2 N* V } catch (Exception e) {
6 Q1 |7 F; }2 {/ ~7 R System.err.println ("Exception stepRule: " + e.getMessage ());8 v1 M. N) V; [# X- }! L
}
/ t/ Q0 N# s7 J: c
; a6 o& ?1 u1 F% j! O1 }& }- p7 x: M try {8 s! X0 O" R5 C- c* {' G# }; Y
Heatbug proto = (Heatbug) heatbugList.get (0);$ g6 j9 L. H5 {$ K: w
Selector sel = , k8 a. c* e H3 H, P% g. C
new Selector (proto.getClass (), "heatbugStep", false);
2 d% j9 E, e6 Y- b actionForEach =
+ j) `) X0 j; {+ w modelActions.createFActionForEachHomogeneous$call9 [6 D2 Y4 M( O& l
(heatbugList," f7 u& O) T' G7 h, p- Z+ y$ R9 n+ D
new FCallImpl (this, proto, sel,9 B$ @; \) Y' {4 v" b& v/ u4 a
new FArgumentsImpl (this, sel)));( Z1 K1 h4 f8 { w- U6 N/ l
} catch (Exception e) {
1 ?/ W* j- S5 n# d e.printStackTrace (System.err);' q( A* x- \+ ~& y. |( y! j
}
9 E" c8 d2 Z- ~2 y1 H " \! p! P. z6 X5 F, o/ v
syncUpdateOrder (); J9 V* J9 i9 Q$ O- y
9 w" O& v) w1 j) w0 Q' K try {
/ r; }! R+ u8 I9 y8 d% S modelActions.createActionTo$message ; G: o0 e9 c6 N1 ^
(heat, new Selector (heat.getClass (), "updateLattice", false));% ]% z. ^- M5 q8 _% c+ ]
} catch (Exception e) { B' w/ ^& x0 i, l0 u
System.err.println("Exception updateLattice: " + e.getMessage ());
# r5 r/ X# ~- `( v' }+ y* u/ N! W }
9 C" m$ \; E9 u: V9 D
1 k P3 z( M0 ?' i! l! j // Then we create a schedule that executes the
$ e9 d% B' f: ]' | // modelActions. modelActions is an ActionGroup, by itself it/ h8 @3 T4 J* [
// has no notion of time. In order to have it executed in% I0 Q( @/ R. H: H! Q P$ u
// time, we create a Schedule that says to use the
1 E+ i" @2 d& F. d& M/ a* x! G // modelActions ActionGroup at particular times. This( x* |# y. I+ p: e
// schedule has a repeat interval of 1, it will loop every' K$ ]8 ?/ O( I& Q6 m2 i( G5 j
// time step. The action is executed at time 0 relative to
( y/ M' n9 }; Z& U- U // the beginning of the loop.
# Z/ D3 v& [5 S# f5 v( Z& S* O; O j' I' A& b/ X
// This is a simple schedule, with only one action that is' t7 g2 \6 C7 `3 ]9 W4 h) O
// just repeated every time. See jmousetrap for more
/ Z. n A0 g' h% Z, t // complicated schedules.
6 b5 g; X9 h$ e" M/ Y' E# q
4 L9 @8 B) {& b( ^ modelSchedule = new ScheduleImpl (getZone (), 1);
/ w( e) U: [8 }$ z# ?' n modelSchedule.at$createAction (0, modelActions);
$ n+ `" y5 }& W! u) G, a + r% @5 ~( f3 }/ I4 x
return this;: k+ v) b0 V, @) S) I* ]
} |