HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. |4 t) k; h; K' h
5 j5 U! k( q, C public Object buildActions () {! l9 a1 G B0 @
super.buildActions();- _3 R6 E& `4 W4 N: g7 X
4 J* K% K( C T% Z$ p1 d+ T // Create the list of simulation actions. We put these in
% B8 L: R/ q! m( Q' ` // an action group, because we want these actions to be# l' L' G0 Y0 Z2 O; d
// executed in a specific order, but these steps should& X. D3 C" ~8 n6 P9 b1 D
// take no (simulated) time. The M(foo) means "The message
+ k3 N3 D- o$ J4 z8 k // called <foo>". You can send a message To a particular5 T6 p3 n1 N4 Z5 k
// object, or ForEach object in a collection. X( h# i# d' o5 X* t
( Y% V( ^; D/ o @
// Note we update the heatspace in two phases: first run
/ W4 m' K1 p2 I( A7 t // diffusion, then run "updateWorld" to actually enact the
6 e U7 ]4 S; N2 Z- } // changes the heatbugs have made. The ordering here is7 T* q' o# Z* x( {
// significant!
! L% k4 _7 ?0 l. p# r' V 3 h' A+ c4 Y; X {/ I* }
// Note also, that with the additional
$ W! w& c9 u( F8 L a: M2 } // `randomizeHeatbugUpdateOrder' Boolean flag we can
. Q' _2 ?, h; K j: _% V6 m // randomize the order in which the bugs actually run3 U( \- |5 L D
// their step rule. This has the effect of removing any
+ a* W/ C# p( N& O2 { // systematic bias in the iteration throught the heatbug. Y% o. S6 i# I7 c! T. I
// list from timestep to timestep2 |" B7 z/ ^' J
' k! k; O' L2 B. h$ O6 o // By default, all `createActionForEach' modelActions have
- T, ?. {: L s // a default order of `Sequential', which means that the& O7 u2 f' Y6 X) x# n
// order of iteration through the `heatbugList' will be O" O8 v0 v# ~$ w* M- K/ Q
// identical (assuming the list order is not changed! u! P2 S4 e3 L0 k8 ?% P
// indirectly by some other process).
/ F2 W. C/ h* n/ ?' }8 J. ]+ \
- X( D& |. L* f! y modelActions = new ActionGroupImpl (getZone ());" p% q e5 e# k: [$ p, s# l
' ~- k" Q8 n2 V( d, r
try {% z9 r& g4 e* f5 a# x$ Y
modelActions.createActionTo$message* Z$ f) C& q. j/ b* o, a# ?
(heat, new Selector (heat.getClass (), "stepRule", false));: \8 U, }* l) l
} catch (Exception e) {+ q3 G$ S9 V1 n
System.err.println ("Exception stepRule: " + e.getMessage ());% v* j w: L9 K; @ ?, r
}: q1 s U/ C3 a+ P2 N4 W3 `
! z9 H- D% b. U# g) t' A try {
. C. |( A6 s. o. C! q8 S' ^1 A Heatbug proto = (Heatbug) heatbugList.get (0);
! F) M; J" n0 _$ ~: w4 G* Q Selector sel = 4 T$ J3 K/ H C. T0 f
new Selector (proto.getClass (), "heatbugStep", false);
+ \9 l3 n# f' m: F. l actionForEach =4 n7 k: a0 ]9 Z: Z( G* ?
modelActions.createFActionForEachHomogeneous$call& @! L1 k4 d- c3 O
(heatbugList,
9 L7 i! v# R; T. ^0 o' ? new FCallImpl (this, proto, sel,
# t% l! Q O. a& G4 C/ T new FArgumentsImpl (this, sel)));' M0 i0 Q4 @" e. Y q: \
} catch (Exception e) {$ }$ l7 y# L& I" {. @0 s; e. a! ~
e.printStackTrace (System.err);
! _; ^" \; `% c' r2 w8 f$ [3 s }
. {) C4 h+ A, w% J! Z
) i" T9 E5 `; p* S syncUpdateOrder ();
- ^: R0 a& k/ Z+ X! [0 [" U' t5 O. v' V! V$ z9 h0 X
try {
& g) O, t; g- U3 |" Q: j( y( M: h modelActions.createActionTo$message
# }5 h- |& K1 g0 I7 T2 x (heat, new Selector (heat.getClass (), "updateLattice", false));. f8 O* G3 G5 m; E/ h. s# a. s
} catch (Exception e) {* L9 n; ]1 s8 u8 m, _7 q; W+ I+ A
System.err.println("Exception updateLattice: " + e.getMessage ());/ G3 n" O9 z/ w! J& c* k' ]* Y- M
}* A2 G8 G# R% Q. s5 G
. F! w% G5 b* G: g
// Then we create a schedule that executes the
5 e/ p4 @/ \" E; b+ ] // modelActions. modelActions is an ActionGroup, by itself it: }+ c. N, E2 p# \& |
// has no notion of time. In order to have it executed in# P g' G6 j% c# G, w4 m! [; k
// time, we create a Schedule that says to use the/ z! h0 d/ ?7 {4 f
// modelActions ActionGroup at particular times. This
; k5 }( P* s" i; X& g. Y // schedule has a repeat interval of 1, it will loop every8 |* n' z# ], r
// time step. The action is executed at time 0 relative to* S3 z: Q1 z+ I, z4 J- {0 N+ c
// the beginning of the loop.2 ^9 P3 H3 e( {7 D' G, f0 A+ H
) a I( t+ \* L$ X. ] // This is a simple schedule, with only one action that is
: D$ r$ S( W4 ~; E( X, R. q- m9 ~ // just repeated every time. See jmousetrap for more7 h. J6 a5 [; c2 g
// complicated schedules.% C" [$ u; N# `/ T p/ z
8 D* m% E, {0 P" N7 a' c$ [" [: L: x
modelSchedule = new ScheduleImpl (getZone (), 1);
8 N4 B( Q2 l$ n0 c modelSchedule.at$createAction (0, modelActions);1 f( I5 p+ ^7 ]0 E' e' |: O
: t" ~' s4 }2 L$ t( L, h return this;2 j9 S: d$ E% f4 W/ P) [
} |