HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 r6 m/ p2 q4 u; x
% b# {; x9 z/ {$ T
public Object buildActions () {) k y' N/ W; E$ Y8 Q$ D+ I/ |% N
super.buildActions();
1 F$ c" `: N8 {: B ) U! U* a T) p; D$ O7 X
// Create the list of simulation actions. We put these in
, p, `5 K! O" K% X // an action group, because we want these actions to be
4 n7 c, a2 t8 |5 ? // executed in a specific order, but these steps should
8 r, [2 [2 x+ V# Y, I4 f1 F // take no (simulated) time. The M(foo) means "The message, r8 ~4 @0 c# T6 {3 u% f5 w
// called <foo>". You can send a message To a particular6 S5 ]0 p" d) {4 @( Q4 r7 n8 p
// object, or ForEach object in a collection. W& c6 [; \1 A" J
7 M& Y0 i* ^6 w
// Note we update the heatspace in two phases: first run
+ M% L( Z3 u/ V# T, S6 u7 W- @ S( n // diffusion, then run "updateWorld" to actually enact the2 F8 O3 f( ~( x
// changes the heatbugs have made. The ordering here is" ]/ |( C+ P6 K' ?3 U# r- @2 q ^
// significant!: N5 u( o, t. Z
' L& `0 s' f5 V, j9 s, ^ // Note also, that with the additional) R3 x1 B& h8 E J6 e
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 f3 k7 d" F1 g& g$ Y, Q
// randomize the order in which the bugs actually run1 r8 _/ \) A# c @) e" e
// their step rule. This has the effect of removing any
) r% M5 ^8 A0 Y z, k // systematic bias in the iteration throught the heatbug
# r8 k# H3 J- C3 i* Z // list from timestep to timestep
$ z5 v! x: P% ^8 A) z& c5 Q5 i
; {1 p" f _9 N; o1 k ~ // By default, all `createActionForEach' modelActions have
a, b* @; `% T) o // a default order of `Sequential', which means that the
2 A! ^! S$ }4 Z // order of iteration through the `heatbugList' will be
4 q' m2 W" s/ D8 r, n7 ?- N // identical (assuming the list order is not changed* E! ? d. [/ }1 ^
// indirectly by some other process).9 z0 @) m0 w$ |8 f. r; z
' M. \1 t0 ~$ B. l0 ?. ^ modelActions = new ActionGroupImpl (getZone ()); d( z" d, k: ?' C" x
! d+ {6 }% ]' u/ g
try { _; |5 a' A+ x0 @3 f( S0 S
modelActions.createActionTo$message
' [- I X( N% h8 X (heat, new Selector (heat.getClass (), "stepRule", false));
# f( P; O: X6 I1 z# S } catch (Exception e) {
1 C( O' a* V) V) F System.err.println ("Exception stepRule: " + e.getMessage ());
2 o/ A( r$ L, Z2 ]7 K, i% c& _ }
6 U0 Z( @6 U4 l; K2 Z# p, j5 `
1 a! P' Q! l' Q* e7 z( m try {
. B& u2 D1 z3 ~! j Heatbug proto = (Heatbug) heatbugList.get (0);
m- g2 J x3 P' p+ m Selector sel =
) X8 c0 L# Z) l new Selector (proto.getClass (), "heatbugStep", false);! J- R; C( E. [! _; Y
actionForEach =! O6 K9 b9 j% k" N' y
modelActions.createFActionForEachHomogeneous$call( l b, W7 R& s& ]. E+ a9 a
(heatbugList,1 Z* G; t& z2 s- c: b
new FCallImpl (this, proto, sel,/ @& d5 c: l) E1 i: ~
new FArgumentsImpl (this, sel)));! w Z% q: g# {2 e2 s& l
} catch (Exception e) {& w. v- d. v0 J" Q) J: ~% x
e.printStackTrace (System.err);
$ C {1 T6 N. e3 y }
" A# r6 Y: V. {- {. z# t6 h - U, R7 ~, {% a& W$ U3 `
syncUpdateOrder ();: G; z; R: ~) } z6 ^
4 k( Q2 P5 [9 a* _; W/ ~
try {3 R# K6 y4 _0 T' U3 q- D! s4 e% M
modelActions.createActionTo$message
. b9 ?8 q6 K5 p3 R8 G9 r (heat, new Selector (heat.getClass (), "updateLattice", false));" q4 m5 y9 F @1 L/ [$ {5 J5 c
} catch (Exception e) {* O) p: B1 F6 k* U. ?$ T
System.err.println("Exception updateLattice: " + e.getMessage ());
% T) e7 z3 c" ~% B/ U# v }
9 Y! \$ ~4 D; q$ d+ ?3 v5 r
2 I# M& ` k } M4 M8 b8 n // Then we create a schedule that executes the
. J P2 N4 h) Y/ @" ^4 S7 D2 f // modelActions. modelActions is an ActionGroup, by itself it4 D# R9 ^. B5 {& ~ t! V F h/ F
// has no notion of time. In order to have it executed in
: N9 _+ J( e' q2 V0 C/ Z8 U // time, we create a Schedule that says to use the
; B& B; g8 ~; _* i) R, ?1 ^2 _; ~# D // modelActions ActionGroup at particular times. This
- W' c: Y! Q. @1 e% m5 c // schedule has a repeat interval of 1, it will loop every5 E5 e" M: d$ ?
// time step. The action is executed at time 0 relative to2 ~( v0 ]5 z: }% S* C8 f1 Q
// the beginning of the loop.7 Q* c [7 x/ n' }. {
2 t9 q( D2 L2 J) W* M // This is a simple schedule, with only one action that is/ v; v; w6 n& x. L# O
// just repeated every time. See jmousetrap for more
! X: C+ N6 c' {+ \: d" E5 v // complicated schedules.
8 j& t! Y d; F7 n9 K& ~
6 o2 c( f1 _; {& }% r! f9 G modelSchedule = new ScheduleImpl (getZone (), 1);' {, C. E& {) V% z6 t {2 O
modelSchedule.at$createAction (0, modelActions);/ R$ H' H+ C" @! p9 r& Y
; H. j. T5 a, l. H
return this;. H$ p* I* j! x5 Y
} |