HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 q8 K3 {. M) w9 T) Y
# ?% G2 r) X% ]+ u$ L- W9 I4 |# U public Object buildActions () {
3 H7 S9 s3 ?* ~0 I super.buildActions();
9 r F7 L, J; D
* d3 e1 |3 R3 J' Z0 Y. |9 x // Create the list of simulation actions. We put these in
1 ?. C- O! V( J+ \+ [/ a0 Q; Q // an action group, because we want these actions to be: @/ q6 {1 t1 B5 B1 S8 j% f
// executed in a specific order, but these steps should
# _5 n% V1 i/ v // take no (simulated) time. The M(foo) means "The message. e3 a O" q* g
// called <foo>". You can send a message To a particular8 C& M7 t9 `* L0 s4 w
// object, or ForEach object in a collection.
3 P; E; U: B, z
: T5 k. a& f8 t# k5 i" d // Note we update the heatspace in two phases: first run
" @6 z8 H$ ]) [ // diffusion, then run "updateWorld" to actually enact the9 V; h+ c) i" n# ?8 W$ Q
// changes the heatbugs have made. The ordering here is
" o# c" ?- q+ ^) r/ ]& A1 i; ` // significant!# m. ]+ j9 g1 P0 n- K& _+ z, Y
/ Y# {0 ], o! s2 z // Note also, that with the additional9 R* s# \& L6 A' v( A' m! v5 V
// `randomizeHeatbugUpdateOrder' Boolean flag we can( ~. I# O1 ]3 v5 N5 W) ~& q
// randomize the order in which the bugs actually run
$ o( {. I: V6 n% T# G. j // their step rule. This has the effect of removing any( x3 g6 b) x% @6 i& x* z
// systematic bias in the iteration throught the heatbug
& C) |" i! J. L5 |8 i. E6 n // list from timestep to timestep
; x: {0 k$ V1 A' ?) z' ?6 `0 G+ X# g Y; J- {; V2 Q) s! a& O( k
// By default, all `createActionForEach' modelActions have
( N( e# A" Q# H+ @% A( I5 j! ]0 E // a default order of `Sequential', which means that the4 i2 A% h. ^0 b4 b
// order of iteration through the `heatbugList' will be& R; I' ~8 j, O# ?0 i
// identical (assuming the list order is not changed9 Z' S I, N% b; S/ T0 ]) N0 c
// indirectly by some other process).( V: h* Y0 ?4 w3 y6 v% _7 N
, g9 D; I1 W) K* r9 ~0 V# q modelActions = new ActionGroupImpl (getZone ());
4 O% L) }* G% A+ O# }4 ?, c6 H. O9 s- P
% G/ [9 }% A9 n& K0 D4 c0 p M try {
: ]$ {6 \" G2 I' z4 k modelActions.createActionTo$message/ u3 u9 s R6 g4 k% B% k, C& W& `
(heat, new Selector (heat.getClass (), "stepRule", false));9 ~0 ^( ^4 j1 ^: N
} catch (Exception e) {
( _% {- t! K x) M* h! R4 h$ l System.err.println ("Exception stepRule: " + e.getMessage ());
. b% U0 v1 I0 E P1 E }5 D6 B6 a) k2 N0 I7 d4 T+ [/ `
: ^( s, I7 f! l, z; Q0 U% r( R( @3 c7 d
try {
, q, W" o7 N2 o, I. Y Heatbug proto = (Heatbug) heatbugList.get (0);" g( L1 I& |% r/ S1 s
Selector sel =
; F3 i' @% T! |/ i' c new Selector (proto.getClass (), "heatbugStep", false);3 L+ p5 c( K4 y5 t/ |
actionForEach =
- ? K9 m" U8 @. g modelActions.createFActionForEachHomogeneous$call8 Q' R! p& n" y* J5 R
(heatbugList,
1 e+ t1 p+ Q( _# J# W' p* l( J new FCallImpl (this, proto, sel,5 \4 @% H- a2 _4 ?# ~# [7 n* O
new FArgumentsImpl (this, sel)));
/ f& a: @$ @0 r0 ? } catch (Exception e) {% M* z: p, g0 M1 x. L, ?
e.printStackTrace (System.err);* [7 U/ |5 s% T2 n
}
+ h p; U& a# _ h9 _1 i8 K/ m; _
! c" k( L* `1 S m7 k9 N& b: ~ syncUpdateOrder ();
$ c* X! T# w9 S4 c# h. O% S) X2 Q J* J
try {
) X! B9 U$ b% N: s9 n" V modelActions.createActionTo$message - x2 D0 K, b* |1 n9 R
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 w# @( }0 j7 |* o! q5 { } catch (Exception e) { X, W5 _" s" r8 `
System.err.println("Exception updateLattice: " + e.getMessage ());5 x t7 x* w% t: B
}
# h8 r0 E0 I- c! t% A' B 2 @* h# n5 C/ h
// Then we create a schedule that executes the) |# W) ]. ]# O3 Z* C6 I) Y. E
// modelActions. modelActions is an ActionGroup, by itself it
& G& ~7 h" n7 z8 z3 @4 n% g2 h // has no notion of time. In order to have it executed in
$ B/ @: z: n! Q- {4 ]5 E // time, we create a Schedule that says to use the
+ X- [: M7 M& v! \ // modelActions ActionGroup at particular times. This
& j; }2 b4 q6 k& V Q9 ~: H // schedule has a repeat interval of 1, it will loop every
8 l3 q% k& _. |1 }) p7 @ // time step. The action is executed at time 0 relative to* g* [9 Y/ D' A! A( @. d4 J
// the beginning of the loop.
4 u/ a0 J0 o7 p3 K+ d( u( c
, F1 M! l$ B' [) s // This is a simple schedule, with only one action that is
, [, v) j' F1 Q! A* ?! [ // just repeated every time. See jmousetrap for more7 `, D% Z1 w) m
// complicated schedules.
% E! K6 c! t8 W- D' e) ^* V# M
3 ?/ M0 r. d9 X4 l( B modelSchedule = new ScheduleImpl (getZone (), 1);$ X- \. N6 N0 i7 Y
modelSchedule.at$createAction (0, modelActions);) g1 e( ?1 k3 G" {, o
3 Y, g7 l8 X2 e0 O
return this;9 d9 b( a. _* Z
} |