HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ d' k7 W( J, O( A2 `
- O9 l) O5 W o) e0 {
public Object buildActions () {0 ]+ i" \, t* M# ^
super.buildActions();
, J/ K r. p, i. `( A
1 s `% F3 s* |. X4 P) L // Create the list of simulation actions. We put these in0 Y( I" Y& x4 L$ n$ Y S3 h- L
// an action group, because we want these actions to be
# d8 Z* X8 O" H9 C, _ // executed in a specific order, but these steps should
6 l* ~4 v/ o/ a0 |+ m% L9 c // take no (simulated) time. The M(foo) means "The message0 s+ y4 c- ]; {% h
// called <foo>". You can send a message To a particular
; P( e. e$ u8 A) H- M0 ]% t3 @ // object, or ForEach object in a collection.
1 |1 l" J* q T& r- n( ^1 | * p) j# \ V$ W& D: T1 P" @
// Note we update the heatspace in two phases: first run
7 B7 y% K& S) G3 O // diffusion, then run "updateWorld" to actually enact the" R/ m2 X. p% y9 Q/ z- H4 ?0 q. a
// changes the heatbugs have made. The ordering here is
" Y: b$ l+ o! T, v. b9 s4 ]- ~ // significant!. W1 G8 e: n$ q1 b
( ~! v5 s' X3 T$ O
// Note also, that with the additional
0 P+ p" t5 V" X3 L: |- p // `randomizeHeatbugUpdateOrder' Boolean flag we can( p3 b0 Y' s9 b8 N# k; q4 f% c+ V6 T
// randomize the order in which the bugs actually run4 M9 l0 L: M4 ]
// their step rule. This has the effect of removing any
: U3 L, Y6 \0 o- }" w- N // systematic bias in the iteration throught the heatbug2 R/ p9 U& L( f
// list from timestep to timestep
2 z' {/ Z5 M8 }2 U - k6 T1 I% H/ Z1 I5 |4 Q |. n; c
// By default, all `createActionForEach' modelActions have
; A1 H! G" [" V B! i k8 f& B // a default order of `Sequential', which means that the
$ {( g' x7 T" Q p! q8 ] // order of iteration through the `heatbugList' will be; P. p$ R$ c3 a6 A
// identical (assuming the list order is not changed
* Y' ]% l! _+ d* [8 l // indirectly by some other process).# Q( b& d, l9 N. i
3 I& T$ }/ W+ _! a, U6 |
modelActions = new ActionGroupImpl (getZone ());: e& T+ x$ V/ s3 k' @
3 r4 w" H- W' q( y8 i! E2 _
try {
U) Q2 A$ h4 _+ T modelActions.createActionTo$message' A1 Q& s6 S# O1 Y
(heat, new Selector (heat.getClass (), "stepRule", false));# L5 X6 l7 z- g8 [; `
} catch (Exception e) {( ^2 P- G! V* T8 B
System.err.println ("Exception stepRule: " + e.getMessage ());0 z" h0 o9 |% e# s. l
} \5 |& w& M" {3 i2 l
* I+ l! ^! w ?& `' X3 i
try {
, C2 {3 N' Y' D* ~8 J- M3 r- | Heatbug proto = (Heatbug) heatbugList.get (0);$ g1 B+ ~) `. |. [$ ]$ f5 x
Selector sel =
; e5 [ _0 G+ h) V+ g new Selector (proto.getClass (), "heatbugStep", false);5 p! e3 D6 G2 Z* ~
actionForEach =
; s5 |, X$ I: h' k; ~+ C) n& u modelActions.createFActionForEachHomogeneous$call p' g- ~ _9 t" m. z' ~
(heatbugList,+ ?5 _. P# d0 F; _5 R
new FCallImpl (this, proto, sel,, X8 r8 h) e; p( t% k0 O _, N& u
new FArgumentsImpl (this, sel)));
: P$ }7 U! F3 W8 @% c) R9 o } catch (Exception e) {3 u+ \1 T* I5 c3 s2 Z
e.printStackTrace (System.err);( x j/ z" J5 t" F% L) E0 }
}. r: U6 ~, k8 R, `7 I
3 q. M% \7 C! e, f+ v syncUpdateOrder ();
' ~! W5 ]. ` d2 L+ X
1 n/ ]1 m* ?5 _ @( I' s6 B try {$ ]1 z3 g: a5 \
modelActions.createActionTo$message 6 E0 `$ m3 W h4 H s
(heat, new Selector (heat.getClass (), "updateLattice", false));
" m9 e3 O0 R% \$ j } catch (Exception e) {% {8 h8 Z$ k3 P, C5 ]) M
System.err.println("Exception updateLattice: " + e.getMessage ());% Q7 L( M2 u! R( W
}. J# h! U8 K% A0 y
4 _9 y9 P% _: k, Z* {
// Then we create a schedule that executes the
( L- @4 h% f2 F // modelActions. modelActions is an ActionGroup, by itself it
4 `, K5 G( [2 m: d0 e5 `- H // has no notion of time. In order to have it executed in
" I. g2 ?& T) T // time, we create a Schedule that says to use the
6 b5 |2 m) r$ T: R( U0 P // modelActions ActionGroup at particular times. This
" e' P- C; V2 g0 k // schedule has a repeat interval of 1, it will loop every0 m. R6 {! A2 _/ Z# Y1 T
// time step. The action is executed at time 0 relative to
7 W0 u2 ?& L# @6 R // the beginning of the loop.
& z* w( V- }7 y* I9 }
, d. H3 _ c" z- M7 j" i7 z4 ]0 w // This is a simple schedule, with only one action that is
6 \8 l8 D$ v3 `* W // just repeated every time. See jmousetrap for more6 z; Z2 X2 W6 y* P0 \5 M4 Z, J
// complicated schedules.: g7 { u% _. W4 T/ `: g
7 t/ @; S, u8 R# D8 f: o modelSchedule = new ScheduleImpl (getZone (), 1);2 Q, h+ Z# r/ c: ? A
modelSchedule.at$createAction (0, modelActions);
3 t3 O' R/ q3 K : |3 L. [) P; v
return this;1 f( Q6 r2 b' b/ B l) M( E
} |