HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; z( ]( ~5 s2 I* C4 |0 k
2 P; J4 [1 N+ h% W$ b
public Object buildActions () {
& o0 e. V3 m4 c2 P$ M# k# }' P super.buildActions();
/ J0 V: N7 O0 o' O 1 ^1 C# c" F8 m: B$ k
// Create the list of simulation actions. We put these in1 t7 E# V% b$ x9 b. B! h& b
// an action group, because we want these actions to be- }* {! c3 X7 S. I
// executed in a specific order, but these steps should
( K# B; C9 y$ `2 v1 ~3 q // take no (simulated) time. The M(foo) means "The message
! I7 u8 T2 u% y // called <foo>". You can send a message To a particular
4 @& H6 B# a* C // object, or ForEach object in a collection. u7 d" r# ^ q# M7 ?
9 m# h( [8 l% f' R- [- H; v
// Note we update the heatspace in two phases: first run: J4 ?1 d/ X( o* H
// diffusion, then run "updateWorld" to actually enact the
. U* l. r% O( }% t // changes the heatbugs have made. The ordering here is
( F3 V+ v2 O6 i7 F. [- V5 n7 x9 S8 B // significant!
! N# P/ J, a9 c5 M4 ^
4 t9 n/ V0 t; V // Note also, that with the additional
3 P; I' u' V# |1 T' o4 b% S // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ m) _% d0 @' [# @ // randomize the order in which the bugs actually run& }0 e* S4 v/ p# u/ f1 T* p
// their step rule. This has the effect of removing any, Z* Y3 y: O, K% b9 y# m
// systematic bias in the iteration throught the heatbug( G8 {7 M1 U* n. @( J( h3 P; J6 \
// list from timestep to timestep
4 p) X" Z: C9 ]9 {4 P: \3 e 7 v) c" Q9 |9 t, h6 x: v! b
// By default, all `createActionForEach' modelActions have
; R' v4 p& ^0 I7 z$ h8 _7 K // a default order of `Sequential', which means that the5 ]+ t0 ]6 q/ t
// order of iteration through the `heatbugList' will be
0 B4 k! D+ t5 x F1 u6 z7 W/ f7 E // identical (assuming the list order is not changed
0 \2 A+ N8 R: j: m' I' D0 W0 C6 b // indirectly by some other process).
7 `; ~/ x3 c' r; L: c ) Y' h: a5 n! A5 B+ w% _
modelActions = new ActionGroupImpl (getZone ());3 r% e& J6 `; q, a! O
5 d s2 D4 U% H+ Z7 z5 s try {% E1 ^" A- R- u
modelActions.createActionTo$message( X9 j+ f2 f3 f0 D0 l
(heat, new Selector (heat.getClass (), "stepRule", false));5 p/ b/ q% B4 f* D/ v0 D. g
} catch (Exception e) {6 u' m- t' e- D: A1 j% S0 @2 {" e
System.err.println ("Exception stepRule: " + e.getMessage ());
1 b: S6 r4 v4 e; q4 i9 Q! Z8 C }
8 n" P0 a% P9 B& S% s, P( k/ _$ T7 a0 S* D4 Z( W8 {
try {4 g7 g# ^% N+ |# B6 N
Heatbug proto = (Heatbug) heatbugList.get (0);0 x; G) O- j8 k6 C3 C& ^* b# |
Selector sel = ) k) a7 {/ d2 Y4 C* e$ D: n
new Selector (proto.getClass (), "heatbugStep", false);6 t. [3 ?$ T3 J' ]
actionForEach =
4 {. h6 @8 [% z( V3 ^$ S E modelActions.createFActionForEachHomogeneous$call$ V( ~% o8 J1 v9 _9 ? d% l
(heatbugList,5 }- G* M! |/ e8 L j; t$ E
new FCallImpl (this, proto, sel,
0 X: |# k5 P' M( R" i new FArgumentsImpl (this, sel)));1 z) }! J* o& r, ~+ t4 c4 i4 W! b/ ^
} catch (Exception e) {
/ w1 Z2 X* ~' T9 S( X) Z4 M3 W8 b e.printStackTrace (System.err);
/ }1 H( m; ]+ }4 ?, [# l- V6 @ }
1 R6 F7 U4 H/ U$ d: E% G % |& v% y8 U8 G. o8 l7 s
syncUpdateOrder ();
! S$ {3 H5 a+ n% Z' n% }. a5 U9 w( W2 ^2 x& _
try {
; v2 w) n3 E9 b9 u! R6 j% o7 P modelActions.createActionTo$message ( \3 N# W9 E! g1 @: [
(heat, new Selector (heat.getClass (), "updateLattice", false));
; S" V$ o* L5 f, J' T# A } catch (Exception e) {, c6 w6 T1 d, n+ S; J
System.err.println("Exception updateLattice: " + e.getMessage ());
. l3 G+ b0 e7 c }7 j# K# y/ _4 l! z
, }) F% t( K" e/ Y // Then we create a schedule that executes the
9 |8 Z* y! o' [) v: U g* P& w4 f // modelActions. modelActions is an ActionGroup, by itself it1 i( o3 o& b+ H4 z% i3 W; @; @
// has no notion of time. In order to have it executed in5 D- p, O: s! u1 t' `8 ?
// time, we create a Schedule that says to use the
, c& W: [ i- _( p9 \ // modelActions ActionGroup at particular times. This1 @0 J5 v6 f& Y; `* L. l3 h
// schedule has a repeat interval of 1, it will loop every
/ n7 q# M6 N+ l3 K- Z$ b; K // time step. The action is executed at time 0 relative to9 ]: e5 k) W3 {" r' j: I% L
// the beginning of the loop.* x5 i/ K. d9 C$ F. _7 c/ S V: p% Q
: l& P4 V; |+ x6 |1 p
// This is a simple schedule, with only one action that is
S% H8 ^' `8 H // just repeated every time. See jmousetrap for more
$ [. t2 T2 d2 {0 g$ ^ // complicated schedules.
2 o+ Z: \! E* G* h ) e$ j- r: ]: ~0 T5 E) M. r! d! p& K
modelSchedule = new ScheduleImpl (getZone (), 1);
( g Z2 p; V# p0 g! W modelSchedule.at$createAction (0, modelActions);
: ^7 d/ `7 K) G
4 V+ L5 Q+ l1 c3 A return this;
w" x) {& v: B$ V1 Q* } } |