HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 i' @) v- o' B4 G3 U0 n* D6 T1 M4 x: s' R4 R
public Object buildActions () {
) F/ A2 x# C, G$ ^0 R super.buildActions();* E5 ]1 B; f2 c: n( V
6 v* M" u+ h! S z1 R( H6 a
// Create the list of simulation actions. We put these in0 D; b6 _/ r" B1 L$ M0 J
// an action group, because we want these actions to be
; z9 I3 {9 L5 ^+ H) Y( B" ? // executed in a specific order, but these steps should9 f/ k! ~( |$ J+ E; u! }
// take no (simulated) time. The M(foo) means "The message4 y+ Z% X* s1 h% }- l% S
// called <foo>". You can send a message To a particular0 X6 z0 r) A4 _
// object, or ForEach object in a collection.
; b4 |7 Q6 f# Y _1 Z
8 z8 N' F# i; \- L6 n' q // Note we update the heatspace in two phases: first run
" S0 f3 T: ^. U9 L$ h2 r! m // diffusion, then run "updateWorld" to actually enact the
4 _0 h: R% i+ \7 I1 Z" G1 k1 y4 X // changes the heatbugs have made. The ordering here is2 I* u w# e/ E: m
// significant!
' O6 K1 T/ M$ M ' L# W' z! B; a0 q
// Note also, that with the additional
; V$ c, o$ A# Z' d$ ? // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 m, s. H, M' t9 k3 O: j1 X; B; T // randomize the order in which the bugs actually run
: ?6 V! x5 F9 |; R' @: e // their step rule. This has the effect of removing any: o- J5 y. p+ E9 f! {+ Q
// systematic bias in the iteration throught the heatbug
5 Y7 x! R! @' z! c$ a3 q9 f // list from timestep to timestep, G4 M% |# m1 h n. C4 S$ V) g
5 w+ C: D6 a" K
// By default, all `createActionForEach' modelActions have
7 D7 Z6 r9 e/ h/ a( v7 u { // a default order of `Sequential', which means that the V* Z, O" a% A I& o* D2 j) T
// order of iteration through the `heatbugList' will be
u# {& u a1 N4 t' \& c // identical (assuming the list order is not changed
5 f- a+ O& B$ { _6 F1 @5 ~ // indirectly by some other process).
2 v6 n* j( x3 i5 E4 v : u, \! e' L9 o5 U N+ }
modelActions = new ActionGroupImpl (getZone ());. A9 k5 A8 S% ^
1 w2 P4 b7 R( } try {5 X( {2 A* _0 ?& r6 V$ I; ?
modelActions.createActionTo$message
! Q/ M% q5 V9 y% ~) @$ b' T0 @3 o (heat, new Selector (heat.getClass (), "stepRule", false));
3 p) o5 a% A, L4 l } catch (Exception e) {/ W! R. X; @7 E/ n& {6 Y* [
System.err.println ("Exception stepRule: " + e.getMessage ());# K& Z! N& b- E7 z+ |4 v
}
# k# s3 N7 b+ S& Z2 G, {& ]( D! O, I- U% }" E% ~
try {
4 D& t+ r" w) ?( z4 I Heatbug proto = (Heatbug) heatbugList.get (0);, D5 M: O& x6 u; V) I; t1 I
Selector sel =
+ F4 W; ~- E0 a) f' _ new Selector (proto.getClass (), "heatbugStep", false);
+ z1 m5 L. E* V0 d actionForEach =
b3 J- f, z. J' Q( `- Q4 c modelActions.createFActionForEachHomogeneous$call! y3 K# t2 o' l1 i/ n9 g
(heatbugList,
2 s6 p$ a* G& `; h7 u+ X* T new FCallImpl (this, proto, sel,4 `( o2 W' h- d6 y+ Y
new FArgumentsImpl (this, sel)));
/ R @; b/ e( a } catch (Exception e) {
* R- j+ A! D* `" h e.printStackTrace (System.err);2 B9 i& j! v& l
}9 P: W) @; ^7 A7 z& q
* Z! h5 q6 p& [& S8 \) D& H syncUpdateOrder ();2 J- G! y5 m* I J4 g0 c
& l2 E, S/ Y" ~9 G( a" V# Z$ F
try {
" A7 v' }1 [8 B( p6 c1 j' k% s modelActions.createActionTo$message 3 V5 Y* w% h! ?$ g @
(heat, new Selector (heat.getClass (), "updateLattice", false));: n! g# P( v6 `& U
} catch (Exception e) {
& H- E* n2 l2 _' n7 ]0 |. ` System.err.println("Exception updateLattice: " + e.getMessage ());+ C& }6 {) X8 F* q5 L/ @
}
q. E: E$ y% Z3 ~1 n 5 _" B) L7 q1 f, q) x/ }, E+ `
// Then we create a schedule that executes the/ E# v# b; s, e- c9 U1 d1 [
// modelActions. modelActions is an ActionGroup, by itself it8 P$ W% D! L& r+ y8 W2 L y
// has no notion of time. In order to have it executed in2 U" Y' X+ N$ j0 N* l
// time, we create a Schedule that says to use the( `# i8 N/ J* [) X9 s
// modelActions ActionGroup at particular times. This% |6 c6 {4 A# S4 H- H1 S
// schedule has a repeat interval of 1, it will loop every
6 h5 Q) B( ^, P7 }* |: n3 z // time step. The action is executed at time 0 relative to2 r- M. y4 x/ G4 k
// the beginning of the loop.3 j ^, P V+ ]3 w. y
4 [- n) z4 n4 w# @6 ~6 ~ o // This is a simple schedule, with only one action that is, W4 R, W. K' J- V: ?# L. Q
// just repeated every time. See jmousetrap for more3 j; w3 h9 I% w2 n& n- m
// complicated schedules. {5 H) T; h& l0 u1 ?
8 X+ m' P/ f3 d! }. r9 P+ e, h
modelSchedule = new ScheduleImpl (getZone (), 1);
' a# ~% c z6 x T modelSchedule.at$createAction (0, modelActions);0 p( E6 b% e0 f. U" O7 {- \6 E
% K% U' }2 U" u7 a( [0 e return this;
: _; r8 c3 X+ B$ d3 F } |