HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ x% m' J" [9 t2 m w5 i9 p, \9 R
4 x- I/ P( |, d& ?
public Object buildActions () {6 _7 x8 P4 I- V& v7 ~0 Z0 a- g
super.buildActions();
" Z5 ~8 m; g6 ]% F
# n1 i: E$ |& R8 v // Create the list of simulation actions. We put these in) D, a- d X( ~0 H6 b
// an action group, because we want these actions to be
# v) ]$ `( T ] // executed in a specific order, but these steps should" ?- K: n* V% r) s
// take no (simulated) time. The M(foo) means "The message
& X2 t* @ w. S& _ // called <foo>". You can send a message To a particular
% u% F* E( n% }5 m# ~1 q% m // object, or ForEach object in a collection.
& _7 d K2 N- J6 l* `" U( b8 ~
( M0 s- `4 n1 M, u+ i // Note we update the heatspace in two phases: first run
( i ~$ z/ p8 W' k0 C& D // diffusion, then run "updateWorld" to actually enact the
% O/ F M( e* a( ?; g% G6 b // changes the heatbugs have made. The ordering here is
1 y# u0 T+ ~! @% b9 i" j // significant!
6 p' O! W7 E; E1 F0 f+ T& k0 D " q* ~. K! ^: e8 m3 G
// Note also, that with the additional
8 `7 F2 E) j# v5 U& E // `randomizeHeatbugUpdateOrder' Boolean flag we can
' ]6 v! O& V$ M, R // randomize the order in which the bugs actually run
4 M5 J6 x- h2 a7 y' Y1 A // their step rule. This has the effect of removing any
8 }7 d1 s; R6 ^, U // systematic bias in the iteration throught the heatbug
, |6 u! C$ G& h$ [) ], q0 o- J3 \ // list from timestep to timestep
J9 x0 I$ ^% a" Q 1 |0 }& Q9 R+ T- Y% h; c
// By default, all `createActionForEach' modelActions have
1 M1 |8 W3 f7 c4 { // a default order of `Sequential', which means that the
! ]4 L+ U' `4 T6 o, v3 O // order of iteration through the `heatbugList' will be
g! M$ H* A. R" l5 H // identical (assuming the list order is not changed
; H& o( Q2 K3 |; r. C // indirectly by some other process).
) O9 V7 v4 z, `9 C3 u7 C
! `! |6 X* r. X' B% j x9 H modelActions = new ActionGroupImpl (getZone ());
9 q. e$ X5 s/ c- Z; d$ ~. V4 _- f8 n( \
try {( _/ c& b Q8 t2 ^' e H4 L- W2 R
modelActions.createActionTo$message
1 q$ p: f# }# R. S( `. c (heat, new Selector (heat.getClass (), "stepRule", false));( t) W9 X9 k' F, w+ l& Y
} catch (Exception e) {
$ u6 d5 g7 O. p3 E+ C% ]9 C System.err.println ("Exception stepRule: " + e.getMessage ());0 V, o P7 N2 e- Y
}
5 Y5 Z( h; H) B8 a
/ |& `' g4 v, }# _ try {5 t4 N+ t6 f; K* n4 o( n8 [
Heatbug proto = (Heatbug) heatbugList.get (0); H# J) h% X) `1 i, Z$ i% g
Selector sel = . P3 r7 z& G5 d, S5 H
new Selector (proto.getClass (), "heatbugStep", false);3 S. c0 Y$ U* U% Y9 n! @; |
actionForEach =
; g" n- ?0 E& Z( L modelActions.createFActionForEachHomogeneous$call
8 X# b2 C/ s+ n L: ]+ S0 r% @ (heatbugList,
8 H4 y+ X2 k3 D' L/ J; Y# B new FCallImpl (this, proto, sel,
2 C- O* g) _; \5 M new FArgumentsImpl (this, sel)));" `2 T$ L4 f: N" j2 a
} catch (Exception e) {
# t* g9 P& Q1 c- g! C e.printStackTrace (System.err);2 |1 k' l8 b# O/ B
}! ^# ]2 Y3 ]) u
! F% L. N/ f7 @% [1 h2 \; K syncUpdateOrder ();
2 [3 U8 M- L. a. _3 ^+ {" {/ z! p/ g% x. G$ o3 i
try {* U% r# W4 J: V3 C
modelActions.createActionTo$message 2 B% S7 F: U+ w# f2 S' G: i
(heat, new Selector (heat.getClass (), "updateLattice", false));* v/ w* a& `% w4 U
} catch (Exception e) {+ `% `+ |( l# @* c
System.err.println("Exception updateLattice: " + e.getMessage ());
6 ~/ N; Q- |' _3 ~# l }
0 G/ f" [" ^# I9 s9 C # h) X3 M* h$ p* B# N0 t$ D/ z
// Then we create a schedule that executes the
3 o1 E' p$ |" @, t* T // modelActions. modelActions is an ActionGroup, by itself it3 t; r/ R6 _( N3 L/ J
// has no notion of time. In order to have it executed in
1 L. U2 V; J6 o/ S8 _: Y // time, we create a Schedule that says to use the1 Y W/ ^4 t* C, I1 Z( X6 E
// modelActions ActionGroup at particular times. This5 I' W# ?& V) ~+ ]2 B1 {% k- T
// schedule has a repeat interval of 1, it will loop every# O& h) |! k: o$ V
// time step. The action is executed at time 0 relative to+ d+ u# M' q+ o/ A
// the beginning of the loop.
4 P5 {7 ~3 X+ W1 a; G6 \
# j \% F( N1 b' b$ L6 ^ // This is a simple schedule, with only one action that is
' V: n/ _ Z& i4 ` // just repeated every time. See jmousetrap for more5 R- o# C( T, J0 L1 h& f1 L+ v
// complicated schedules.! V: S6 W4 }5 i1 A: i1 q1 M
; N9 B. U/ p+ q& T# E' P- h! P modelSchedule = new ScheduleImpl (getZone (), 1);
4 k+ R$ Q# x9 X* m) h modelSchedule.at$createAction (0, modelActions);0 p3 N; p; b) h$ j; q
* H3 c% S1 U8 o- {$ Q, d
return this;
# [# R7 W# E1 n } |