HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 H5 w; g# r3 [, i0 A4 h" T0 y
: ^3 n" z( U) t1 k
public Object buildActions () {3 E1 t/ ] O" f8 j9 _( V1 u
super.buildActions();
# t0 H t3 {/ b6 P( y6 C. y( \
& O Z) V' @' ^ // Create the list of simulation actions. We put these in* L# |8 e' N; x7 H* k! @
// an action group, because we want these actions to be7 j3 D1 ?8 B3 ^3 p* K8 }
// executed in a specific order, but these steps should
- ]( y3 B, q7 ^ n# T // take no (simulated) time. The M(foo) means "The message3 e! S; E* n8 |( n4 @7 x6 ~
// called <foo>". You can send a message To a particular* ]2 d: J# c) I% b
// object, or ForEach object in a collection.( k. X. n$ z/ W4 y
( n `7 D3 D1 o+ J" \; s
// Note we update the heatspace in two phases: first run& _( J8 I( ? l- Q( q
// diffusion, then run "updateWorld" to actually enact the
/ @/ @$ B% a0 r5 H, A // changes the heatbugs have made. The ordering here is( J# P( L6 R. X
// significant!7 V2 f. s) T! t7 G
5 [3 Y j$ M3 `7 l, l
// Note also, that with the additional
`1 @, d# f6 I% Z& p! O# L // `randomizeHeatbugUpdateOrder' Boolean flag we can
) \4 D$ E% F" b1 Y' ~! C // randomize the order in which the bugs actually run& y! F5 i" Y' d" e( H
// their step rule. This has the effect of removing any
2 [; K/ E& C; A // systematic bias in the iteration throught the heatbug
$ c: ?) t' i" v5 f) e8 k* e // list from timestep to timestep
* ?7 B0 @- [; N% x5 A" i ) e0 t! [7 V$ y n3 X: w
// By default, all `createActionForEach' modelActions have# A0 O. L# m% F8 ?, K- K0 X7 @
// a default order of `Sequential', which means that the
% r# ]3 c7 n5 i G+ P# W // order of iteration through the `heatbugList' will be
9 p* W0 D, t; G# U& R1 O q/ Q // identical (assuming the list order is not changed! I% X) n9 u K( _
// indirectly by some other process).+ B+ o, D2 g" A
- d! [* @' X5 V, K. m! B
modelActions = new ActionGroupImpl (getZone ());; B# ?, ?! K: h4 L' s5 `+ e+ i" w
# U8 D `% M7 ^# u* Y9 A. ` try {$ b+ y& F5 l+ K4 t+ T$ l
modelActions.createActionTo$message! V& L z: R3 w% V" N0 S7 |# a
(heat, new Selector (heat.getClass (), "stepRule", false));( [7 c. x( f' Y6 K" r* B/ q+ o+ c- [
} catch (Exception e) {
! d4 e3 Q6 D/ F0 p P& m( e' w$ Q System.err.println ("Exception stepRule: " + e.getMessage ());
0 O, U6 f( s* A; ?, Q# ~ }
. m4 ~; Y! Y2 z% O3 Q5 t8 P; ]0 ]9 _, p, {- ?7 W: w2 }
try {
, _0 B# @6 M _: h Heatbug proto = (Heatbug) heatbugList.get (0);
$ x3 X' C5 v. K' p# W" Z# Y Selector sel = ) r5 q/ r4 Q9 l6 T" m& R- e0 z
new Selector (proto.getClass (), "heatbugStep", false);
4 R! S6 z" Y- W actionForEach =
6 K& [' D" K8 K modelActions.createFActionForEachHomogeneous$call& L- J# _! S9 ^
(heatbugList,+ g- _' ^8 W6 O% u
new FCallImpl (this, proto, sel,
8 [+ M8 ?8 d: x5 }% {, r new FArgumentsImpl (this, sel)));
6 P: V" B7 i i } catch (Exception e) {
0 P Q* ~0 m8 k e.printStackTrace (System.err); N8 h! C9 w* {
}
+ L8 z+ m- K2 N3 r' M7 H 6 i- t" l1 ]3 }7 b& v
syncUpdateOrder ();
8 T- A# p+ L0 A# E2 ^" a' [
; C$ I1 o' A- i try {
3 b( ~0 b6 h. T! b! Y modelActions.createActionTo$message * L; m; @ t' n% w
(heat, new Selector (heat.getClass (), "updateLattice", false));
: S- D s- |4 ~( E } catch (Exception e) {
, b! l N+ U6 x. p, C+ W: ]# o _ System.err.println("Exception updateLattice: " + e.getMessage ());
; F$ x3 n+ G/ F" M, ?( z }3 {5 i4 i, i" v) y* n z6 m% t* O
9 ^& L; N6 g: C* v2 f' T6 z( A' N
// Then we create a schedule that executes the
6 Y( p: p1 d8 Q2 ]2 Z5 e5 C7 n // modelActions. modelActions is an ActionGroup, by itself it
" V: v! z6 U, J // has no notion of time. In order to have it executed in; E, ^, m7 J1 l5 q/ w. _
// time, we create a Schedule that says to use the
) c0 A# [7 h9 K& c' M // modelActions ActionGroup at particular times. This# M. c0 Q' q' X* ?+ A$ y
// schedule has a repeat interval of 1, it will loop every
# b* j! k( e! f7 g // time step. The action is executed at time 0 relative to
% e7 m9 P+ X* y) D; O4 B, s // the beginning of the loop.
l4 p# [2 Z3 u' a9 K* Z4 G5 g& T) A# n* |
// This is a simple schedule, with only one action that is
3 p& o8 L* L8 M% O# |6 [ // just repeated every time. See jmousetrap for more
+ U8 @. e- j" \/ L2 j6 T/ w7 M // complicated schedules.
9 c5 T P$ X0 ?6 z
7 L- Y& {. D& m/ T modelSchedule = new ScheduleImpl (getZone (), 1);# K, k# |1 H3 @, O" Z v
modelSchedule.at$createAction (0, modelActions);
. C! n1 B4 n; ~, z# M! w3 l6 p
5 Z- }9 D6 ~& }! V3 f return this;7 w3 f0 z5 R7 c" q* ~% |7 f6 m' {
} |