HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 @& u& a& V7 X v% d2 H
) h$ g% k- I, D1 P2 _ public Object buildActions () {
4 E% L3 R8 Z1 F' U$ V super.buildActions();
' l- ^! w4 s- p" {0 }
3 \$ }* z6 _3 S. Q" j: Q' ^: t // Create the list of simulation actions. We put these in7 M: u- \# e2 U2 S5 h3 ?. y
// an action group, because we want these actions to be
% o4 I' ?4 x8 C+ c1 v // executed in a specific order, but these steps should5 Y! G3 o3 h, v- ]6 C. k3 G
// take no (simulated) time. The M(foo) means "The message
* l: B" ]/ T( g+ O3 q // called <foo>". You can send a message To a particular
. H% X5 W. ~7 u: h5 h8 I; g // object, or ForEach object in a collection.
2 \- n( ? @7 t, n: R3 j3 s0 r5 u( f
$ U# g) s2 n" f$ U // Note we update the heatspace in two phases: first run
c5 H( F' W. j // diffusion, then run "updateWorld" to actually enact the
' l( [! T; [0 w" J D0 K) r8 J3 a* f // changes the heatbugs have made. The ordering here is
) F l0 F# c! d2 a, U8 M6 R // significant!
) e' y- Z- p0 j+ W# A8 w w6 z : ^- D2 R, x3 l# W) |
// Note also, that with the additional- Y% ~ | |; U3 g4 \! ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can" ]/ U2 a/ A# P6 q8 y
// randomize the order in which the bugs actually run
) u0 G& V, d# X1 ` V9 o // their step rule. This has the effect of removing any
$ Q- J: L1 K- V3 B // systematic bias in the iteration throught the heatbug) u" r. b7 h6 X+ d1 @9 ~6 j
// list from timestep to timestep
' [. |, O. j- E5 d( t9 {: M/ ^ " X5 B/ O7 s* b' F' o4 U$ w
// By default, all `createActionForEach' modelActions have
: W v8 ~/ {( b) e+ W K$ i7 k // a default order of `Sequential', which means that the
3 R0 \6 e7 M- |3 b // order of iteration through the `heatbugList' will be
" e( p1 d# d- I9 @8 `1 | // identical (assuming the list order is not changed( {5 U+ F, w; }
// indirectly by some other process)./ w4 }7 w, a1 g
3 R; N# v1 i" S/ u# _ modelActions = new ActionGroupImpl (getZone ());
6 r5 d) d1 m1 e/ U
$ Q* `( K2 G0 R try {
a. ?* e2 t. K0 C modelActions.createActionTo$message
$ G" T. \. B) \ (heat, new Selector (heat.getClass (), "stepRule", false));& d R1 { z1 R$ k% G, @
} catch (Exception e) {
# I. |5 }# M$ O+ ~* T% S/ G Q System.err.println ("Exception stepRule: " + e.getMessage ());
% o0 T; X( a* v }) p0 ~) a+ e" ~6 G! f
! |) V' O% u: R, k% s* l- \5 M try {
8 m7 a9 R1 O5 i Heatbug proto = (Heatbug) heatbugList.get (0);
9 y v0 J# U, F Selector sel =
; T. \4 |5 y& U new Selector (proto.getClass (), "heatbugStep", false);
) K" x. u6 h1 \ O6 p, B' d3 w actionForEach =' ?+ F: ]" M8 _( ?( O9 {; q) G
modelActions.createFActionForEachHomogeneous$call+ t+ @. j6 A( _; F$ a7 e# P) o* [
(heatbugList,
{% J* y8 Q s3 ?2 M, l new FCallImpl (this, proto, sel,
0 l- \+ }! S0 {; ~ new FArgumentsImpl (this, sel)));- a& T @- ?+ r0 h
} catch (Exception e) {
$ H) m% z. @5 I* h1 r* g p e.printStackTrace (System.err);
5 ?, n# Z1 _; M9 G7 ? }
% h+ I! i- D; O) b , K( L* n- [ @5 @9 F/ e
syncUpdateOrder ();* W0 u+ J- {: s: D7 I
; `; p* a) [, N5 ?" N" t* O try {
3 V! i+ c5 J) R% U; c9 W" r6 H modelActions.createActionTo$message , }% @' F0 d, w6 I
(heat, new Selector (heat.getClass (), "updateLattice", false));
~" T- K3 `6 m) A& D } catch (Exception e) {8 d/ B& }, ?9 ~+ c
System.err.println("Exception updateLattice: " + e.getMessage ());( w7 @) Z, K |! |) M
}
: F, W# d7 Y* a# O 8 h: |1 W/ b; h
// Then we create a schedule that executes the
# q6 j5 p2 [/ p1 Q3 m# ]/ \9 b. h // modelActions. modelActions is an ActionGroup, by itself it4 j; H% E: @, l2 ?4 r, T# ^
// has no notion of time. In order to have it executed in
" ?" @/ [: L! f( ] // time, we create a Schedule that says to use the
/ S$ C$ K7 h( @ F$ K // modelActions ActionGroup at particular times. This" `8 _* P4 C+ A. ~9 J0 r& L
// schedule has a repeat interval of 1, it will loop every1 w' {2 p1 `+ d. o1 r8 K. c% m
// time step. The action is executed at time 0 relative to
) v. D/ S* b1 z, v/ p6 f& Y0 [) u // the beginning of the loop.
* c+ T9 L& f1 O! A, C5 M9 Z4 j0 [8 Y; m7 A) Y4 R
// This is a simple schedule, with only one action that is7 c2 t( a6 j+ F. I3 g* `2 d
// just repeated every time. See jmousetrap for more
1 Y" }/ r( {6 k U0 E // complicated schedules.
: N6 G! s9 t5 W5 k ! w% B( L" J# O Q( ?
modelSchedule = new ScheduleImpl (getZone (), 1);
7 y: c9 c6 \$ c) U, l modelSchedule.at$createAction (0, modelActions);6 k0 T$ x7 ~& F* A/ B3 A
; B4 B9 q+ n' D+ w" i
return this;, H& x" X5 H) b/ J
} |