HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ T8 D& ^. |$ ?: ]2 G3 F6 P
/ ^- \* S6 I* U public Object buildActions () {) p0 B j( h: H6 L( F" T& B. F
super.buildActions(); `* v* @$ b" }1 }( I
. n0 K- o8 x) R, C // Create the list of simulation actions. We put these in1 m( I! r4 r( p. M- [$ ^
// an action group, because we want these actions to be
4 T5 t0 {, `0 D" V // executed in a specific order, but these steps should: E! u& y' Y2 U* ~* c1 x1 v- F
// take no (simulated) time. The M(foo) means "The message
1 F; ^' m2 _9 O' ~( u // called <foo>". You can send a message To a particular% ]7 s; p4 y3 L: v8 x
// object, or ForEach object in a collection.% U5 [' g9 [9 l2 E; K
' e' @4 r- E3 ^" K% j8 r // Note we update the heatspace in two phases: first run
0 `4 x- n* o* `. o5 P // diffusion, then run "updateWorld" to actually enact the
X$ t/ T, [& |- _ Y# ]) a; X // changes the heatbugs have made. The ordering here is
3 J; L4 V" z) l) U" |% E // significant!& _2 `1 F: G5 b
1 b/ B) g7 c }# ?; z4 `
// Note also, that with the additional$ F4 f# }& ^$ K$ q
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- Q3 e \1 W/ s // randomize the order in which the bugs actually run* z/ F: V* j- ?6 ?! o& w
// their step rule. This has the effect of removing any
; `, S( x) B: ^) g- n // systematic bias in the iteration throught the heatbug3 y9 O+ D4 B& S4 \: T6 J; }* x
// list from timestep to timestep% K W# R" M7 h) z6 g( j
5 }1 K9 \, g7 ^* n: M. Y$ M
// By default, all `createActionForEach' modelActions have! v$ w/ T% X' k) n
// a default order of `Sequential', which means that the
' w: j: e; g" i" F* c ~$ b // order of iteration through the `heatbugList' will be% K, f* d1 [8 L2 v5 t
// identical (assuming the list order is not changed
5 L C0 t- I8 B& M( w // indirectly by some other process).. [* ~/ X2 W2 e" M* r9 T- ~! s
: P' Q: }9 R/ B9 b2 s# E) t
modelActions = new ActionGroupImpl (getZone ());
" J5 d3 |- g7 ^* n$ A8 r b. ?
& Q e1 M8 M* v1 e' m G try {
: O" }, \' S# I modelActions.createActionTo$message
/ I: w2 b3 u$ Z7 ^ Q5 O (heat, new Selector (heat.getClass (), "stepRule", false));
/ s7 U& z/ X* X$ M& T } catch (Exception e) {+ x O+ m) ^& l7 N
System.err.println ("Exception stepRule: " + e.getMessage ());$ c" J& v$ C/ J7 R
}( h2 y8 e1 o* F6 k
9 P/ d: f0 ?# `) V& R3 d( x
try {
5 D3 d2 T2 p( m5 b6 Y( ?4 `4 B Heatbug proto = (Heatbug) heatbugList.get (0);* ^' S) l* O2 m" T7 {; J
Selector sel =
) A! X1 S l& k0 W. ^' s i new Selector (proto.getClass (), "heatbugStep", false);% B/ L3 w5 j6 D; I3 R
actionForEach =
. z( Y8 j9 Z8 t4 {# p- b- \ modelActions.createFActionForEachHomogeneous$call
/ Y2 w& f* V- O (heatbugList,; S+ X+ e9 F, \% t
new FCallImpl (this, proto, sel,
7 X+ ]& F1 N: o, `- } new FArgumentsImpl (this, sel)));0 s2 W8 G2 T n
} catch (Exception e) {
1 E+ r9 c {& L n e.printStackTrace (System.err);$ G# f! S4 E# k1 x6 k3 ?' S) x0 q4 ]
}4 l0 j, t" I4 [& k$ `! k
: |- Z/ b h/ m1 c9 s syncUpdateOrder ();; Y9 l) Z! t" ]% }3 ?
0 C7 S0 X: ~) |2 n- D# n9 S0 ` try {" y/ R D2 X0 ^2 O8 x
modelActions.createActionTo$message
: J& L$ O3 R. i2 J, E6 R9 T (heat, new Selector (heat.getClass (), "updateLattice", false));
9 Q1 M1 c4 a2 n7 u9 p } catch (Exception e) {
, e$ I% W8 ~+ F5 N System.err.println("Exception updateLattice: " + e.getMessage ());
k# s/ G! B9 J }& o6 U! @$ _# N! }7 P
/ x* L8 P O( a8 ~0 L. E0 s
// Then we create a schedule that executes the
( ~5 j0 G# k7 C2 q% A* ]. F // modelActions. modelActions is an ActionGroup, by itself it5 ?; L8 v( |2 a, W
// has no notion of time. In order to have it executed in4 ~% h9 R8 y; L$ x
// time, we create a Schedule that says to use the
+ P- J2 p( s9 J! N8 h3 j // modelActions ActionGroup at particular times. This
B. {6 D) f9 p3 E // schedule has a repeat interval of 1, it will loop every; ^0 M" v4 z% K# k" {0 ^
// time step. The action is executed at time 0 relative to# y, x+ G. M; q# f1 ^9 b- F( @
// the beginning of the loop.
5 [5 B. P! t- _, l
' S6 A) w5 J- G) t9 R8 {8 S6 i // This is a simple schedule, with only one action that is
% \# U" G; [* \$ U // just repeated every time. See jmousetrap for more
" K& [7 d4 G8 A H" C3 G3 k: U // complicated schedules.
0 x0 O8 H# v0 B: w
5 k5 F) U# e H/ M modelSchedule = new ScheduleImpl (getZone (), 1);
& f @) Q+ C8 z. ] modelSchedule.at$createAction (0, modelActions);
4 @' i1 J# ]* e . ` }9 ~' S" k% v
return this;- a, q& |9 w z( T9 C1 y7 I
} |