HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ }1 H6 k9 B% A$ D* P E- C4 X/ d1 ^+ @6 _
public Object buildActions () {& X' j# s3 e2 M: a8 e \
super.buildActions();( r. u9 i7 H" f: b7 K) d0 e# z
! b, ?% f7 V6 D! E0 u // Create the list of simulation actions. We put these in
4 y( j7 T, w0 T' @$ v7 [* Z // an action group, because we want these actions to be
, T* q# N6 H( z // executed in a specific order, but these steps should4 S" _4 W0 _. z, K$ C) Z; V
// take no (simulated) time. The M(foo) means "The message3 @! {4 h5 I7 K. w" S8 h
// called <foo>". You can send a message To a particular" V. a0 f2 ~# X6 N) c
// object, or ForEach object in a collection.4 y1 R, o. x4 W9 a e$ T, c
, a! D% @: n3 i! ]
// Note we update the heatspace in two phases: first run
' A1 l# ]" b7 }. ]# H2 J // diffusion, then run "updateWorld" to actually enact the. i; R k, n5 }$ L; Z3 Z( o% u' D
// changes the heatbugs have made. The ordering here is/ L/ l1 e0 Q$ o" [
// significant!1 |3 _# A5 m4 {7 D' S8 J
. B) G+ q. |& P; A/ b, ^8 N // Note also, that with the additional# z; \6 N# I6 W S4 D
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) k0 _: W0 q }3 P5 k; R u% b // randomize the order in which the bugs actually run3 L, G) b+ x' D
// their step rule. This has the effect of removing any
: T7 s. p( w) T* l1 ]+ W: F+ | // systematic bias in the iteration throught the heatbug1 h( [% _: E% @1 [' V* a
// list from timestep to timestep/ w3 K3 W. S8 b( u* t. {
$ ^3 K* \4 p4 y! f
// By default, all `createActionForEach' modelActions have% K, c% u& V* z- A0 y# V. g% [
// a default order of `Sequential', which means that the
, M( K* E; V+ K3 d1 t // order of iteration through the `heatbugList' will be
& e: e* B% ]9 w7 R5 |& V: ~* R! R // identical (assuming the list order is not changed7 h9 Q- n& v+ v) [+ K7 \1 O$ W
// indirectly by some other process).
* h3 i0 _) I- O6 [2 ^$ x" _
; [) H' l' a- `4 n modelActions = new ActionGroupImpl (getZone ());- d$ ]+ |3 H* z0 s( E! o" N, j
( ^& y8 U y3 I$ m
try {& i' z! @# E1 E
modelActions.createActionTo$message
9 p) c; t/ i0 H1 j% L) [, [" Z (heat, new Selector (heat.getClass (), "stepRule", false));
# A2 G2 C( H5 l# A" b9 I1 x } catch (Exception e) {+ m9 D# Q: M( P& V3 ]5 Y
System.err.println ("Exception stepRule: " + e.getMessage ());" d H( H( i1 d- Y# q9 ]3 t" s
}1 w% ^' j% ?: n) u" }
# i' {* `9 F* m5 _8 x5 L try {
# B, L) k/ r+ V; H Heatbug proto = (Heatbug) heatbugList.get (0);2 q: O% T$ R- K) n4 D
Selector sel = 0 f- K( w& l4 ]1 f
new Selector (proto.getClass (), "heatbugStep", false);) s' U8 F2 C; o2 i- K
actionForEach =
) J* Q# i8 ?* f2 t# O* s2 f8 Q! b modelActions.createFActionForEachHomogeneous$call
# q$ H: Z5 p) n (heatbugList,+ s7 W% \8 L, @" ?! j
new FCallImpl (this, proto, sel,2 v- O! ^) b" S+ ~; H
new FArgumentsImpl (this, sel)));( x) A( P; u" M! R, C O0 H
} catch (Exception e) {" C: ?2 K9 h) C: a& F4 _# R: s
e.printStackTrace (System.err);
: t9 G/ i$ H2 @3 {- t- i* Z }
% @* ^( H( I ~. p/ G 6 W: C! p8 Q. u: S8 E
syncUpdateOrder ();" p* l# I k5 L8 X; x2 t
; y" y( V4 y+ } @% w+ R3 q
try {
+ z3 R8 s8 S& h) ] }! J: Z- c& i9 } C modelActions.createActionTo$message
% g- z. z$ N8 l( v- | (heat, new Selector (heat.getClass (), "updateLattice", false));
. Q. q' x) O5 a/ g' x, I } catch (Exception e) {; L& m5 c u0 O: E) K- P
System.err.println("Exception updateLattice: " + e.getMessage ());
$ K% a; |1 f& X5 N8 Y: \6 l }# b: V& F. M$ ?7 _7 c* T5 J1 {" ~
4 u% Y' c9 @4 t! H4 Q2 m // Then we create a schedule that executes the) d7 S% c- u: L" X' Z
// modelActions. modelActions is an ActionGroup, by itself it( N- X' W$ M2 ^0 a" m' q
// has no notion of time. In order to have it executed in, }6 w# e2 Z8 Y6 j8 u" i
// time, we create a Schedule that says to use the+ T* [1 M5 K# i; M. X( H6 ~
// modelActions ActionGroup at particular times. This
% k2 v' |0 A! i: `5 | // schedule has a repeat interval of 1, it will loop every$ {6 W. {% }( f; p) ~
// time step. The action is executed at time 0 relative to
% n/ R8 P& v% h& P1 V1 E) U+ a // the beginning of the loop.
9 q7 U8 l3 m! N Z2 l) T% J
( Z" A5 ^3 ?$ m3 k // This is a simple schedule, with only one action that is' F: k% K" P% t
// just repeated every time. See jmousetrap for more
( V3 q) a7 g0 q- M$ r: E // complicated schedules.
- `( A; q6 m, `4 u
7 ^9 j. I3 Q; I& Q2 k7 H( X. a6 _ modelSchedule = new ScheduleImpl (getZone (), 1);/ y5 z- z' i1 K8 L7 T( D) c/ ?
modelSchedule.at$createAction (0, modelActions);
3 ]2 w+ _ O- ] ( t4 b) u+ o4 z: ]0 ]4 W
return this;$ a" x' C g% X ?
} |