HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ s+ e' a1 {0 Z+ c; d/ W
8 o" {& _( |5 ]4 q; H e" F
public Object buildActions () {
( ~% s* R% G Q4 W H super.buildActions();
& O2 `1 V l; L0 N6 c 5 {+ p6 Q n5 ]
// Create the list of simulation actions. We put these in
" [ p5 P% D: l* u7 B // an action group, because we want these actions to be8 q& F% o9 C) O" L
// executed in a specific order, but these steps should
' g( j! h0 N' h4 j5 C // take no (simulated) time. The M(foo) means "The message
1 V8 z Y# ]* J // called <foo>". You can send a message To a particular
/ e9 f9 Q- ~% M" [' l, y // object, or ForEach object in a collection.
4 c* R" M7 N$ O
! h! Y% K' Z% L7 f: D // Note we update the heatspace in two phases: first run
$ w. `1 T4 k, D1 ~3 i6 d: [ // diffusion, then run "updateWorld" to actually enact the
$ S, N* d( T) Q- R5 S5 S // changes the heatbugs have made. The ordering here is
2 a: O& Z2 L# T% m // significant!
2 Z6 n7 n/ l1 K6 e
8 a* G, O5 N/ r1 X t+ a% o% e // Note also, that with the additional' @, L3 m" a# h0 ^' t9 @; V
// `randomizeHeatbugUpdateOrder' Boolean flag we can
6 l2 m& n; [ L7 W // randomize the order in which the bugs actually run
; C- m" d) d0 S/ ^# J% E8 _ // their step rule. This has the effect of removing any
0 c4 A6 b, F3 j8 T- p% N // systematic bias in the iteration throught the heatbug
$ O M8 S" g1 c; s3 M- B4 \ // list from timestep to timestep- E) o: ?& \7 ^; P
% x( x3 E1 X+ l8 d0 Q
// By default, all `createActionForEach' modelActions have: l9 d9 F8 w6 X5 p
// a default order of `Sequential', which means that the. s+ c( N; \4 S/ {, t( l
// order of iteration through the `heatbugList' will be$ Z: C/ a& u, ]; G* O J, z; \
// identical (assuming the list order is not changed
F, a. y% l! o8 A' T/ ` // indirectly by some other process).
, N* B$ u- ^7 v: ?5 z* g 6 [" r3 m: I4 d# s8 Y
modelActions = new ActionGroupImpl (getZone ());
; N' M/ ^# G' A/ n/ n1 V% U$ K/ C' U1 ~& ^
try {' Y6 S. U% [5 Y" V& `) L
modelActions.createActionTo$message& I0 ], k% J5 ?: z/ X
(heat, new Selector (heat.getClass (), "stepRule", false));
. f, l) j4 ]) }" Y* Q9 v } catch (Exception e) {, o4 Z2 E; }2 ?: P. }2 G6 g
System.err.println ("Exception stepRule: " + e.getMessage ());9 J! |1 \- A( A4 b, v) f
}, a) g2 V1 I; A. R
; B3 ?5 U! x2 s. c) }! @7 S try {
" ?. y! h) B o% Z/ _ Heatbug proto = (Heatbug) heatbugList.get (0);
* o( q- r- e% F0 [2 b) [! H Selector sel =
! r$ ]6 J* w; O2 Z new Selector (proto.getClass (), "heatbugStep", false); P. ?9 C5 g1 T8 U8 L
actionForEach =
: p3 Q# F4 `+ g4 M modelActions.createFActionForEachHomogeneous$call; D' |0 \! n6 {4 l, }+ F. g5 S
(heatbugList,
1 K" P: s/ |) i new FCallImpl (this, proto, sel,
# _1 ~1 \3 H5 ~+ T! T. K new FArgumentsImpl (this, sel)));: d# F( Y7 [- K
} catch (Exception e) {
* }7 T# _* H& ?0 Q7 T5 T5 j( I2 }: ^ e.printStackTrace (System.err);3 L( C3 W$ p7 Q. x
}
1 }, ]; |! e8 ~( R5 j
- _) u; A" U' b0 }( K. y' A( i syncUpdateOrder ();* ~) v& l7 D0 R H$ Z) P
; v3 s3 A9 Q* w! z% W try {
2 r k! Q: R- R- y/ m% Y* |# c- N modelActions.createActionTo$message 8 y# n7 A; z( V5 l0 K7 J7 G' ]
(heat, new Selector (heat.getClass (), "updateLattice", false));, M0 g Z0 w$ ?* y
} catch (Exception e) {
' F1 z7 e8 G% X* K4 v+ `* O6 w- j) W System.err.println("Exception updateLattice: " + e.getMessage ());
! {, ?8 g; o+ I& V/ z/ o' M }
$ J' H: @1 f8 w! S" Q. D$ k# \
9 J! K# p( g% C( {8 |( ]3 e4 p0 h% E4 H, J // Then we create a schedule that executes the2 ]1 e# B8 t9 E5 [# \) n
// modelActions. modelActions is an ActionGroup, by itself it- ]6 _, y, o3 z9 s- e8 O
// has no notion of time. In order to have it executed in
1 H/ q) z! W" H: M/ ]4 `/ \ // time, we create a Schedule that says to use the
# A! ^. G, Z9 Q7 m // modelActions ActionGroup at particular times. This
9 T% i0 M+ A/ m, ]" N2 X6 @ // schedule has a repeat interval of 1, it will loop every% z- j+ y, g+ j, a8 c3 I
// time step. The action is executed at time 0 relative to
% u7 _( r6 A7 I$ ` // the beginning of the loop.5 h! F( J+ V7 g3 t) P' v, O
6 c, A5 `' B! i1 q3 ]0 z7 e9 X7 `
// This is a simple schedule, with only one action that is
# C, ]% ~: Z3 J# G" H" ` // just repeated every time. See jmousetrap for more; ]1 P- R8 p" r
// complicated schedules.6 ^' K P5 R, C
J" e5 G! t& I: F7 c0 X modelSchedule = new ScheduleImpl (getZone (), 1);! U0 f) O3 R% O
modelSchedule.at$createAction (0, modelActions);9 R" O# x3 C" [# d2 ^0 C! N! i
2 f4 ~& z4 S7 w: b: E
return this;4 O3 n+ c# f. |9 {7 d" c6 n
} |