HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 G: ~3 o4 B3 a3 v; K
9 P0 z4 r! w2 S. @ Y public Object buildActions () {" w8 o n, `$ q# w7 l) ?/ `
super.buildActions();0 f9 g1 h3 F/ y w* i+ x+ S
7 C0 t7 C j4 m! L* `$ e& ^
// Create the list of simulation actions. We put these in
( f6 s. M: ?0 ~# F // an action group, because we want these actions to be
" _ O& S$ f# h8 o# f" A+ z7 P, W // executed in a specific order, but these steps should
9 t0 z. U. Q/ a: o8 ~ // take no (simulated) time. The M(foo) means "The message
: E4 S# Y! p# i // called <foo>". You can send a message To a particular4 _9 y" X/ C$ s
// object, or ForEach object in a collection.
9 S6 O: L1 [! W; Z ; p1 X: v+ C [7 y1 k3 u2 |; n
// Note we update the heatspace in two phases: first run3 h% v% r, c B9 }- ^# `- e" x( _
// diffusion, then run "updateWorld" to actually enact the" K2 M |0 ?: d8 z
// changes the heatbugs have made. The ordering here is
/ `# x, d6 n$ J1 o9 b // significant!
. E9 t9 @9 q- T9 l8 O0 Y 2 T& ?. g- \7 L+ Z0 Q
// Note also, that with the additional- k, @ H+ K5 ~! D7 V$ P
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 }* j6 _, J& L* l+ { // randomize the order in which the bugs actually run
6 e H# V1 p) L$ ^ // their step rule. This has the effect of removing any+ f4 g) ~& V3 [# ]8 k. U0 i% r
// systematic bias in the iteration throught the heatbug
- J c& \! N- v. q2 d; U // list from timestep to timestep
) ~, V! N+ W$ w/ Q; N) { h
5 d$ ] t& V7 h; u // By default, all `createActionForEach' modelActions have6 x. U6 m% q. q' _4 [2 Z. O/ n
// a default order of `Sequential', which means that the# k8 m) B+ G7 s$ }0 a
// order of iteration through the `heatbugList' will be# N# y4 C# W4 ]0 C1 J5 A
// identical (assuming the list order is not changed
+ e+ C& p- T! s' K+ | // indirectly by some other process).- e' R# W5 j; O9 ]7 z
$ v( F7 W: P0 M) p modelActions = new ActionGroupImpl (getZone ());* M, M( o+ H/ Q) T( @
7 T. [/ ~3 G9 X* ?7 u try {
$ t' ?- }7 ]9 I3 d3 Y5 ?$ F modelActions.createActionTo$message
) R( Y8 W) K. N7 f/ ^ n" Z (heat, new Selector (heat.getClass (), "stepRule", false));
' u4 R2 }+ R. e: i3 C0 `$ v/ D } catch (Exception e) {
2 p5 a) ]' X# i System.err.println ("Exception stepRule: " + e.getMessage ());
3 L4 |+ {. {4 _0 [3 I6 Y }
; d! I O6 q& L! X. {3 T, z& ~ D! }1 u' k, s
try {
! A3 q. Z" ^" H V6 L Heatbug proto = (Heatbug) heatbugList.get (0);
0 p" A$ X q+ |; j: _4 C Selector sel = 6 ]3 B0 J' h# a6 C7 C
new Selector (proto.getClass (), "heatbugStep", false);
3 G0 b8 {( f( A, @8 Y2 q actionForEach =+ `! }5 l8 y! d; p9 ~
modelActions.createFActionForEachHomogeneous$call* `) {3 H4 u1 B% f3 F
(heatbugList,& A/ s6 x) t7 a0 O
new FCallImpl (this, proto, sel,1 o2 k! Q: p6 @7 u2 f4 a* c$ ?
new FArgumentsImpl (this, sel))); ~- n6 r1 t7 h }# k [7 |8 Y
} catch (Exception e) {3 ~! Z2 T( v0 K" }
e.printStackTrace (System.err);
* V/ }$ b0 \5 o/ W# I" c8 h$ ?& z9 D }5 k3 C% K6 `$ A0 @1 b4 ^5 |
7 T j* {* N4 [ syncUpdateOrder ();- J. r' Q/ h/ m; i' g/ }( d- ~
; r5 m$ m' F8 }5 U try {
' b- R+ z* [! J5 Y modelActions.createActionTo$message 2 \6 _0 X, O' L4 N p
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 S2 H$ x) I! ]& z2 p } catch (Exception e) {
: |. v5 R" v* ~7 B- V6 A3 P System.err.println("Exception updateLattice: " + e.getMessage ());. W7 Z$ G$ L1 U* F' S& a5 c
}- Q* C2 a6 p3 F+ Q7 Z2 d. q( `
& R9 s3 C' ]8 v1 _; d" z* ` // Then we create a schedule that executes the; P# t/ q8 `: x& T" {% C
// modelActions. modelActions is an ActionGroup, by itself it+ y! N* V* [- o" o7 U
// has no notion of time. In order to have it executed in
& B+ @$ A( ]. O% R$ R. p5 o5 W // time, we create a Schedule that says to use the& t. E, \" @5 o! L9 [6 u5 d* g
// modelActions ActionGroup at particular times. This" M: T: V/ s; Q" V* s# j
// schedule has a repeat interval of 1, it will loop every
6 A X d- e3 J5 d // time step. The action is executed at time 0 relative to
7 @& m) V% e* p- S // the beginning of the loop.: Z" v9 S' F4 z
, u# |' p( \, @
// This is a simple schedule, with only one action that is5 r6 E. X; @2 [+ R8 l! B
// just repeated every time. See jmousetrap for more- A9 ?3 c4 l" `0 M0 p A
// complicated schedules.! _4 w. e ?$ K+ ~' W: t
% q; d4 L, E+ T/ ~( M modelSchedule = new ScheduleImpl (getZone (), 1);7 G9 N# B& z- g4 J1 D
modelSchedule.at$createAction (0, modelActions);
; o h' J( L! Y- n" q + E- G! t: }4 Y" U% D
return this;
! E- Z% _$ C! _( T } |