HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 ~7 S) M5 o/ W
+ d7 K: m: r! ?( \8 h+ a8 m public Object buildActions () { e" O0 f# q9 A
super.buildActions();
& `' p5 w* \: V* ^
3 S. n2 m* p% m' O; v // Create the list of simulation actions. We put these in
1 Z2 ?( V3 W) ~) I. |/ D- D // an action group, because we want these actions to be
! }5 v( w1 s9 j9 T2 P // executed in a specific order, but these steps should6 ] Y( M- Q& W8 E
// take no (simulated) time. The M(foo) means "The message
5 b' d' ~* I) ^4 u! z // called <foo>". You can send a message To a particular
5 A$ V k: U) S& b1 T. t // object, or ForEach object in a collection.
6 t& a1 |' M8 Z+ n # \1 `" ^6 \, f1 i
// Note we update the heatspace in two phases: first run
; `* P& H3 V9 `5 t+ R0 _6 t+ l // diffusion, then run "updateWorld" to actually enact the! p" M7 {" W# D/ `& F( N% G
// changes the heatbugs have made. The ordering here is
6 N' n# F/ c7 X% l // significant!
9 l- U( R$ ^+ v# H3 I1 W2 U+ i+ ]
. P+ r! x/ J' c2 ?1 L // Note also, that with the additional
) L5 g! t( e8 e% f& Q y& z# D // `randomizeHeatbugUpdateOrder' Boolean flag we can
& @! P6 c! {. y$ y; q // randomize the order in which the bugs actually run& K) c$ g4 K( ^0 J+ W
// their step rule. This has the effect of removing any9 W& c5 d; W$ o
// systematic bias in the iteration throught the heatbug/ [$ ~' P* n: z: x4 g
// list from timestep to timestep
3 J! w M5 |* A- o9 Z) \& a1 b
& O/ e$ ^+ n. ^- Z% h0 B // By default, all `createActionForEach' modelActions have
d, @7 H8 x+ v# W // a default order of `Sequential', which means that the
1 l4 o& n0 V3 Z; y, f: |2 K2 M: e // order of iteration through the `heatbugList' will be- q) C6 ]. b2 P5 ~$ K
// identical (assuming the list order is not changed
8 B3 _% a1 r( a# Z3 e // indirectly by some other process).
; t$ e$ x- v+ x0 a% y 3 C4 n; D# M& ~) X# v8 ^9 ?
modelActions = new ActionGroupImpl (getZone ());" |, r$ J3 i& J# Z3 `' S
# ^3 v! f" Y) p8 H
try {
" q( R2 C! v5 d" A8 v modelActions.createActionTo$message
8 `7 j. F% E* d" \7 Q! z (heat, new Selector (heat.getClass (), "stepRule", false));1 i9 Q/ d, G$ Z. K
} catch (Exception e) {6 [6 s1 F. l5 P* o; f; P* ^
System.err.println ("Exception stepRule: " + e.getMessage ());5 A/ `* q6 W" a3 w
}
+ ~6 c$ c/ T4 X: w3 e! |2 y% l+ s2 s5 \
try {; |0 V2 h# i2 R o
Heatbug proto = (Heatbug) heatbugList.get (0);
2 l" F9 M( {* w% I( v& ~ Selector sel =
2 L+ M7 F1 G# n m8 n new Selector (proto.getClass (), "heatbugStep", false);1 _$ b+ Q+ U% q: C9 F6 |
actionForEach =9 ?2 c4 L7 i, Y( ^* M
modelActions.createFActionForEachHomogeneous$call
1 m" R6 F9 ^& t5 c. ? r- t: u: s, n; T (heatbugList,. F+ O; d- `8 _. R( P
new FCallImpl (this, proto, sel,
% O# V' r! b) z0 A! e4 @ new FArgumentsImpl (this, sel)));3 }1 n- U/ N" m$ [; e1 y5 r
} catch (Exception e) { o) U G& N7 J
e.printStackTrace (System.err);
4 b$ U5 ~" N/ ] m }
; j' N. K) r( F. [
p3 H: \) A) O& V4 g syncUpdateOrder ();
# _' p% w7 v' C% R, W* W% r P" _( X8 N/ b: j
try {
6 A6 G/ U' y, n( y modelActions.createActionTo$message ( N6 }# R% a; d; d0 n5 [0 Y
(heat, new Selector (heat.getClass (), "updateLattice", false));+ \- Z- e- B N \5 [9 Y+ x
} catch (Exception e) {
7 C$ Q7 X* [' y% G( B+ z6 ] System.err.println("Exception updateLattice: " + e.getMessage ());
5 G% n# E0 y" L: p }4 h# y6 H, `2 A9 l# K$ @
) I. C+ N$ C- T7 } // Then we create a schedule that executes the
# h. J! q. I3 g7 h) i( y2 c // modelActions. modelActions is an ActionGroup, by itself it
9 k* @1 i# o: R4 X5 d% E; u, u9 R: { // has no notion of time. In order to have it executed in
1 t% @& E4 i3 Q, M9 e // time, we create a Schedule that says to use the
- ~( M' e6 m0 ]. F/ K // modelActions ActionGroup at particular times. This# @6 }6 b0 W4 \( R
// schedule has a repeat interval of 1, it will loop every
. {6 Q! W7 z8 ~7 I- ~/ W7 w // time step. The action is executed at time 0 relative to
( u$ a3 l' U/ U // the beginning of the loop.
: ^3 u0 N. u. P3 ?' c8 z
; V6 B; o& c/ M9 l // This is a simple schedule, with only one action that is$ ?5 @! d G# r4 j: W! f9 A& K. U
// just repeated every time. See jmousetrap for more
5 j3 B3 o# G0 L' P // complicated schedules.
! |% h% Y0 g. r' N
5 e3 A1 A `$ J modelSchedule = new ScheduleImpl (getZone (), 1);
3 F, Y$ R9 M0 B+ |6 h% G modelSchedule.at$createAction (0, modelActions);3 H$ T8 U: Z% ?' S4 K- {: w& k5 C
- f( z- B# v; O+ c- r. c
return this;- H) y% I/ b' h
} |