[英]F# do let execution order
我是F#的新手,所以这段代码对我来说很奇怪
let randomTest avgWait avgBusyTime numExp numClients labsRules =
let clients, _ = mkClientsAndLabs numClients labsRules
doTest [for i in 0..numClients-1 -> randomTestClient clients i avgWait avgBusyTime numExp ]
do let clients, _ = mkClientsAndLabs 5 [rulesA; rulesB]
doTest [scheduledClient clients 0 [(0, 500, A)]; // Request a lab at the very start, use for "A" for 0.5 seconds
scheduledClient clients 1 [(200, 300, Mix (Mix (A,Mix (A,A)),B))] ; // Request after 0.2s, release 0.3s later.
scheduledClient clients 2 [(300, 200, Mix (A,Mix (A,A)))]; // These three will all be waiting for a lab.
scheduledClient clients 3 [(400, 200, Mix (A,A))]; // Client 2 should include the others as guests.
scheduledClient clients 4 [(400, 200, A)]
]
我不确定的是do let
声明-显然是在randomTest
之后声明的,但randomTest
仍然可以调用该函数。 该代码执行的顺序是什么?
它的编写方式可能会令人困惑。 没有do let
声明之类的东西。 事实上,它是一个整体的do {code}
使用let里面绑定块{code}
。 这意味着它不是函数声明,do块只是要执行的代码,它没有声明函数或值。
这样应该更容易阅读:
do
let clients, _ = mkClientsAndLabs 5 [rulesA; rulesB]
doTest [scheduledClient clients 0 [(0, 500, A)]; // Request a lab at the very start, use for "A" for 0.5 seconds
scheduledClient clients 1 [(200, 300, Mix (Mix (A,Mix (A,A)),B))] ; // Request after 0.2s, release 0.3s later.
scheduledClient clients 2 [(300, 200, Mix (A,Mix (A,A)))]; // These three will all be waiting for a lab.
scheduledClient clients 3 [(400, 200, Mix (A,A))]; // Client 2 should include the others as guests.
scheduledClient clients 4 [(400, 200, A)]
]
所以执行的顺序是let randomTest ...
,然后是do
块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.