HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% U4 A9 U( n% t5 c6 J* ^
0 c* n! Y, Y& \6 e* |, u public Object buildActions () {
4 ^+ A( B R c4 F super.buildActions();6 n8 j" w5 z; G
0 {9 S0 H$ ]7 V1 q2 F
// Create the list of simulation actions. We put these in
4 \ |' }8 ?2 s+ J/ `0 r$ U" X // an action group, because we want these actions to be
; [' f1 I4 A+ K" D+ j // executed in a specific order, but these steps should
* ~2 ?5 t; u' A! n/ F! s // take no (simulated) time. The M(foo) means "The message
2 ^$ D4 K1 ?4 Z# |6 w1 b+ S // called <foo>". You can send a message To a particular
1 Q9 p. h& Y" Z* V5 U // object, or ForEach object in a collection.
, o" o/ P6 e+ v! X; P8 y, e0 B
$ {1 ?' `& E% e* r // Note we update the heatspace in two phases: first run7 K6 `, e* O( e1 B [
// diffusion, then run "updateWorld" to actually enact the
2 q4 }' c! Y8 |+ I; R( w/ f // changes the heatbugs have made. The ordering here is
5 P- w3 n. ]& D2 W: P& w2 [ // significant!
7 b. q" E* g( H3 b
: n2 p$ P% y& m+ |( t: d" } // Note also, that with the additional% A: X3 V: U0 }
// `randomizeHeatbugUpdateOrder' Boolean flag we can* P, @* b( Q0 w1 a& B
// randomize the order in which the bugs actually run9 E. Q. h" z# j0 A1 z
// their step rule. This has the effect of removing any
2 S" L) ]. I$ ?* P0 U // systematic bias in the iteration throught the heatbug- i# |2 B% b( R8 w: E9 H$ Z# V% U! x
// list from timestep to timestep
" M7 I$ t' I4 g0 K' g
9 l E+ r3 B! u9 D) I // By default, all `createActionForEach' modelActions have9 \3 ` D5 C/ f" N l; I
// a default order of `Sequential', which means that the4 L2 M8 c5 F2 L* S0 p
// order of iteration through the `heatbugList' will be
' }) C7 b, H* ? P // identical (assuming the list order is not changed
+ a" a3 @( a; _! s: M // indirectly by some other process).
' r$ T, { q$ _" D1 A
( T/ {- O2 d+ w% Z modelActions = new ActionGroupImpl (getZone ());
; z" j* r% q& X- l& v
K' e/ Z) @8 W" g$ ~$ t! S- d5 X try {
( Z, w3 U" h* m# d/ g$ B5 v modelActions.createActionTo$message
1 P" e! w& \- o" o& ?7 I! F (heat, new Selector (heat.getClass (), "stepRule", false));0 X5 @) z$ ^% w. j1 A2 J
} catch (Exception e) {. k) p4 ^+ A1 n4 C c
System.err.println ("Exception stepRule: " + e.getMessage ());/ {) e' ^1 s& X: v/ w
}
5 n6 o2 p$ l8 L. e9 B; ~0 p- l# E: }( ^0 i& [
try {. X- z/ e, M, v0 ^6 W! ?* S
Heatbug proto = (Heatbug) heatbugList.get (0);
# N @. A! a$ }- G+ v$ F0 C8 P Selector sel = / X# ]! ]3 a$ e# o' k' z
new Selector (proto.getClass (), "heatbugStep", false);7 H* A. D8 ?$ v2 [5 {8 e
actionForEach =4 {0 e* H B1 O8 e5 O( S
modelActions.createFActionForEachHomogeneous$call6 R9 G& N9 s2 g4 K3 d9 [
(heatbugList,
$ K) ?4 e3 [) A( F& C! _ new FCallImpl (this, proto, sel,
1 V c" b: I1 D5 q8 X5 E new FArgumentsImpl (this, sel)));3 q- D q3 p2 ?' J9 b, ?3 ]
} catch (Exception e) {! O6 |" ^7 \, v/ w- l
e.printStackTrace (System.err);+ V: X$ w$ k# y5 D4 h( @7 M: y
}( ^' w9 m: S, x) h" T1 {" I
% f* W4 N7 S- L% Q8 S+ U
syncUpdateOrder ();
, Z7 G) c3 D x4 g' y. W/ ^0 p5 g
1 ~ u4 x6 J9 d0 Q try {
- C' x$ U3 U8 \" g modelActions.createActionTo$message
* ^! ^& Q# F2 a) a& { (heat, new Selector (heat.getClass (), "updateLattice", false));$ t# Z1 v% \ n# `. v
} catch (Exception e) {
! B" d" Y5 u. N' l System.err.println("Exception updateLattice: " + e.getMessage ());
4 F* q4 B U8 {% v$ I1 W- N }
. z$ ~! X6 `# i) j . q$ }3 p, A3 y
// Then we create a schedule that executes the2 J N2 q7 Y1 t6 Y$ h8 ]. V
// modelActions. modelActions is an ActionGroup, by itself it- d v/ B5 L0 x- G' e- w
// has no notion of time. In order to have it executed in
# T5 n& h3 C7 F. _4 B // time, we create a Schedule that says to use the
' ]3 F) Q+ n3 r. f) Q // modelActions ActionGroup at particular times. This) ], U& C9 ~, P5 B! _$ b
// schedule has a repeat interval of 1, it will loop every
, U1 h& b, F* E' f // time step. The action is executed at time 0 relative to
, U% U- U4 ~* C& K8 b# a // the beginning of the loop.
1 ~/ @, J( g; N9 _9 I2 ?
/ L9 {6 x; l- M1 Q // This is a simple schedule, with only one action that is
0 T4 R" a' C) L4 B) i // just repeated every time. See jmousetrap for more
9 h" A: c$ x6 I+ E' \+ c8 Q // complicated schedules.) k2 P( N9 A/ j* ?, N9 @
; j4 s4 _' h3 L* N- w( c& |
modelSchedule = new ScheduleImpl (getZone (), 1);( T% d" o g6 ]( a, b
modelSchedule.at$createAction (0, modelActions);
0 u# G" A7 y7 L- c% o! d ( _; N9 N" P: k- t- x# t
return this;
: P9 R0 ~3 V1 ?- C } |