HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 I* O" }* X# K- d1 d& q5 |9 f
. ~% q& ]; H8 v* W4 I public Object buildActions () {2 [2 c4 Y0 K3 v! x
super.buildActions();+ C7 Y4 X& n) a0 ?6 ^
: x9 @. ]/ a F7 \+ f2 i // Create the list of simulation actions. We put these in
' S# {1 X/ z# X0 ` // an action group, because we want these actions to be
* E5 e1 v8 ?$ y z4 j, n) { // executed in a specific order, but these steps should
. u7 t1 J4 Q+ P8 Q! G% i. A // take no (simulated) time. The M(foo) means "The message, p3 X, g1 e- d" E6 K/ d
// called <foo>". You can send a message To a particular
. N2 x# c5 L& P // object, or ForEach object in a collection.- z2 L, J9 H+ E% ^/ o
' p n% n5 u9 @) z7 X$ L // Note we update the heatspace in two phases: first run4 \7 S7 {* K! J3 V1 f
// diffusion, then run "updateWorld" to actually enact the0 ~+ o; l+ H- G" x! C& C1 O
// changes the heatbugs have made. The ordering here is
+ G/ n7 [" N8 S // significant!
' p7 ~1 h" y; f+ q" L5 Y + R0 q! m0 f; `2 Z: H U" c# k
// Note also, that with the additional
! i6 K7 n/ c5 _3 i$ s5 Y4 M // `randomizeHeatbugUpdateOrder' Boolean flag we can
( v( H# q5 M4 \1 l8 n // randomize the order in which the bugs actually run; j$ v, z) [, m# H: V' a
// their step rule. This has the effect of removing any
3 V+ {7 F+ [5 t) z // systematic bias in the iteration throught the heatbug. X F: b0 B+ P8 y* A) B
// list from timestep to timestep
8 j2 D7 b, _) O! p0 ] ! s: k3 T0 e1 S( p4 v% D9 U- z- D
// By default, all `createActionForEach' modelActions have
% R `7 \7 ^' \2 V, h" e' m/ w J // a default order of `Sequential', which means that the' @$ H- Z0 F8 m
// order of iteration through the `heatbugList' will be- K3 Z& d* g3 M' P0 y* i) g
// identical (assuming the list order is not changed3 `0 h! s# N( N L
// indirectly by some other process).
! {# O' D$ B- v! B' i6 e! N
: [; G. P3 X( Q9 Z9 M f6 n* W modelActions = new ActionGroupImpl (getZone ());9 s/ \; N; t, @$ i
6 C8 k4 S$ t& @% O3 _
try {
/ D- g1 T7 D3 Z3 t2 z modelActions.createActionTo$message
( y: B5 _% M/ m' o8 { (heat, new Selector (heat.getClass (), "stepRule", false));
1 X+ K* l- X* y! C5 m } catch (Exception e) {6 C, P% h5 q- Q* j
System.err.println ("Exception stepRule: " + e.getMessage ());
5 {6 G H* y& c }# |9 P' b/ V7 O
2 R3 S% L$ b6 w. v0 b* [ try {! u1 \2 }4 O6 _" b$ d
Heatbug proto = (Heatbug) heatbugList.get (0);# M" M4 B' T: k/ V; p! s2 C) \/ ?, x4 t
Selector sel =
) U R' r4 S0 N+ v new Selector (proto.getClass (), "heatbugStep", false);
1 g6 e1 h( i' D5 U4 ?3 W actionForEach =
' k* \# E/ h7 C! U- Y modelActions.createFActionForEachHomogeneous$call
& T0 M. ?. v# w9 E N2 G, n (heatbugList,/ j0 S5 i9 y% Q
new FCallImpl (this, proto, sel,
7 @* |. ]/ H- X6 {7 v; X" D9 T' _ new FArgumentsImpl (this, sel)));
5 E7 Y& d3 h8 v0 X. r" s& d8 m } catch (Exception e) {/ a/ T- L' {* @/ T1 c
e.printStackTrace (System.err);8 M2 p, F; J9 u9 k
}9 w" {( r) B W/ p
, F' l3 x0 i2 P9 q$ X2 z( v6 `) _ syncUpdateOrder ();# h. W1 i5 g( ~0 Y. J0 n- p
3 J: I4 T U' @4 r
try {: D% Y1 I! O' f- ~" }! C" _! L& K
modelActions.createActionTo$message / P3 t3 E& W+ ?6 p
(heat, new Selector (heat.getClass (), "updateLattice", false));# S3 x5 {( ?; f3 N7 L
} catch (Exception e) {
+ ?# k% Z, J2 p5 `; d3 s' \ System.err.println("Exception updateLattice: " + e.getMessage ());
+ U/ e* n2 u3 \9 |7 ?# }2 `7 S }5 V/ ]" x. e2 g. ^% C5 f
$ f" g; ~8 T/ s" z( ^
// Then we create a schedule that executes the0 ]% l( m8 P# q2 b4 S
// modelActions. modelActions is an ActionGroup, by itself it
' U7 Z: A( j3 [9 b // has no notion of time. In order to have it executed in2 l# b9 r. L( G; J# r4 z/ ^
// time, we create a Schedule that says to use the) ^( B0 m" R* N* J3 n
// modelActions ActionGroup at particular times. This( c- s' n3 }8 ^. J2 _
// schedule has a repeat interval of 1, it will loop every/ ^$ t9 y; @+ {% r" r# m
// time step. The action is executed at time 0 relative to; U/ B6 v0 R) N% a
// the beginning of the loop.
3 Y! I$ c0 J# x# u/ `+ c, Q, u. }8 k( p |# D' g& f
// This is a simple schedule, with only one action that is
! K1 Z( T5 M$ e1 T; Q // just repeated every time. See jmousetrap for more4 a2 Y3 s: L" t# t* J
// complicated schedules.% W. n) G, m7 d
' y5 v! t/ W; P6 q' X) D: X- o4 ~
modelSchedule = new ScheduleImpl (getZone (), 1);
, G- k9 ] u% T/ ]! Q" g modelSchedule.at$createAction (0, modelActions);
7 L( F& M& \# ` ( ]7 a A D1 F, n# ~! a* n* I
return this;
7 p; m/ |7 H# ~9 [ } |