HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# k4 e3 m+ ~- r ^
& A- L3 U7 ?6 f2 e: D# Q W5 ?
public Object buildActions () {
+ @4 b$ R x8 G; Y( B( T super.buildActions();
7 q, [2 J2 s: n/ J% Z1 Q' q, @ : K& T, y' N2 A9 t! Q) g$ p
// Create the list of simulation actions. We put these in
( I3 B0 U1 X5 V O" p // an action group, because we want these actions to be
# J$ s4 }/ L7 Y2 e3 h w // executed in a specific order, but these steps should
+ g, D' V9 [. @. ~3 c // take no (simulated) time. The M(foo) means "The message3 y) W7 D& A, y) u! q' T* c4 h. P
// called <foo>". You can send a message To a particular6 D" B5 `5 v+ J+ C( C9 B& w
// object, or ForEach object in a collection.
9 K: `: h% b1 H
: e! g6 S0 M8 h F( j' _ // Note we update the heatspace in two phases: first run& {( j; |2 N$ I2 R
// diffusion, then run "updateWorld" to actually enact the
* n Y D9 w7 L1 i; e // changes the heatbugs have made. The ordering here is+ m2 d: k, p2 o2 y0 V4 p
// significant!
0 {9 t; t# S4 a" E% K. h
) ]2 I8 m% }7 r9 \ // Note also, that with the additional5 g) x8 e4 i# z- W8 X
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; |# ]1 j5 ]2 G K" W- _' l n" } // randomize the order in which the bugs actually run
3 `1 C: ~, _, v; q: c) m+ @ // their step rule. This has the effect of removing any
/ C! m+ W8 a! |9 { // systematic bias in the iteration throught the heatbug7 j2 E1 }" F0 }( i
// list from timestep to timestep
" U8 T5 D* e7 @ . q: A8 h5 F# m
// By default, all `createActionForEach' modelActions have" |* u1 H6 a$ \3 I& o
// a default order of `Sequential', which means that the$ Z$ A5 |$ n5 q
// order of iteration through the `heatbugList' will be4 [7 M2 k9 e) N7 J$ v8 v- J. s0 o6 G
// identical (assuming the list order is not changed9 X0 H1 u8 y6 _
// indirectly by some other process).
0 h0 H* k- X& E Z
( ~2 c R o: t6 m modelActions = new ActionGroupImpl (getZone ());' n# b- e0 C3 S" n0 O" \! B
5 J7 l- d1 Q# a& t m try {$ U/ J' Z# h) k0 }3 o
modelActions.createActionTo$message
- b% d" T" b; }/ i, ` (heat, new Selector (heat.getClass (), "stepRule", false));8 E4 d* _0 G- a
} catch (Exception e) {
% {% V4 T% L3 q2 Z5 ~. a4 [" B/ _# @) v System.err.println ("Exception stepRule: " + e.getMessage ());; |' Q. s8 c, f9 F
}( I k4 q/ s! _8 U: u; O* @; y
l! P+ x( G5 _. a2 k+ U. d: \ try {
- y$ D2 T5 g6 p4 Y: k n- R0 N2 U Heatbug proto = (Heatbug) heatbugList.get (0);" t2 f% h. o7 P& @2 v" x, X) M7 L6 S6 l
Selector sel = 4 ~$ _- M6 i/ ?* K$ e$ s
new Selector (proto.getClass (), "heatbugStep", false);
1 M) I* G3 k/ T6 C7 S6 ^ actionForEach =
* r3 U$ i* W$ |7 e6 J* {3 m+ i modelActions.createFActionForEachHomogeneous$call" o8 U+ c0 O+ o9 [: _7 c" a ]
(heatbugList,
9 _5 I* F8 z0 D9 N. D4 o new FCallImpl (this, proto, sel,
1 } P/ D' C" Y( X: u( n new FArgumentsImpl (this, sel)));3 Y$ R( M6 x% H# X, c0 n; X
} catch (Exception e) {
5 j3 C) u# T; f7 Q) s0 Q& z e.printStackTrace (System.err);
) N; ^ [' S3 A/ T1 M4 S* a }* d% y* p% o' K2 A f* e
+ W) t2 v' w. s) X3 P" B4 u4 Y' L& G syncUpdateOrder ();" V8 `( V% s8 b
2 u o( Z: @# R6 }& L, |
try {& c' B) |' {2 f. z) T
modelActions.createActionTo$message
9 \( [! _1 d' Z3 [. p/ @- u (heat, new Selector (heat.getClass (), "updateLattice", false));% D6 s6 ~2 \" Q, _8 |7 E
} catch (Exception e) {0 Z1 }/ Y% h) m$ }% ]# u$ B
System.err.println("Exception updateLattice: " + e.getMessage ());
& d# ]1 ?8 ~ S, _ }( s' @5 Q& M* f) _9 E: i: s* e
, }4 x; I' x5 E o4 |# G // Then we create a schedule that executes the
: ^, t9 k2 c5 E/ K1 u1 F: ]% k // modelActions. modelActions is an ActionGroup, by itself it
; ^* J: w7 d7 ^! g1 J. _9 N // has no notion of time. In order to have it executed in
$ y/ |* g0 ^( i3 p& x, ^ // time, we create a Schedule that says to use the3 k3 K4 w) @3 G! i
// modelActions ActionGroup at particular times. This
* W+ p* v+ [3 H6 D // schedule has a repeat interval of 1, it will loop every
! P9 e' b9 j! m // time step. The action is executed at time 0 relative to, ?* |: s* o% @' n: h- p( l
// the beginning of the loop.
" e9 G M; V3 a6 \6 z: V' ]9 T0 N$ y& S; ?: ]
// This is a simple schedule, with only one action that is3 ?% ^$ e4 M( P. x
// just repeated every time. See jmousetrap for more( S" A; ~9 t% i' F9 M6 {! H* {
// complicated schedules.$ t- _, r" u I) [/ I$ k
+ P: [+ e' }# c/ _. x! L modelSchedule = new ScheduleImpl (getZone (), 1);
+ u5 v. ~ S) c: _ modelSchedule.at$createAction (0, modelActions);# X6 T/ ]/ ~- v$ U9 T; r
5 y- Y' V( o3 F: F# I$ H0 `- y
return this;
; {% e4 D8 Q6 Z% q3 ` } |