che*_*zer 18 f# break while-loop
有什么方法可以做到这一点C/C#?
例如(C#风格)
for( int i=0; i<100; i++)
{
if(i==66)
break;
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*cek 30
最简洁的答案是不.您通常会使用某些高阶函数来表达相同的功能.有许多功能可以让你这样做,对应不同的模式(所以如果你描述你需要什么,有人可能会给你一个更好的答案).
例如,tryFind函数返回给定谓词返回的序列中的第一个值true,这样可以编写如下内容:
seq { 0 .. 100 } |> Seq.tryFind (fun i ->
printfn "%d" i
i=66)
Run Code Online (Sandbox Code Playgroud)
实际上,如果你表达一些高级逻辑并且有相应的功能,这是最好的方法.如果你真的需要表达类似的东西break,你可以使用递归函数:
let rec loop n =
if n < 66 then
printfn "%d" n
loop (n + 1)
loop 0
Run Code Online (Sandbox Code Playgroud)
一个更奇特的选择(效率不高,但可能对DSL很好)是你可以定义一个允许你写break和的计算表达式continue.这是一个例子,但正如我所说,这不是那么有效.
这确实很丑,但以我为例。
let mutable Break = false
while not Break do
//doStuff
if breakCondition then
Break <- true
done
Run Code Online (Sandbox Code Playgroud)
这对于do-while循环很有用,因为它可以确保循环至少执行一次。
我希望有一个更优雅的解决方案。我不喜欢递归代码,因为我担心堆栈溢出。:-(
小智 5
您必须将其更改为while循环。
let (i, ans) = (ref 0, ref -1)
while(!i < 100 and !ans < 0) do
if !i = 66 then
ans := !i
ans
Run Code Online (Sandbox Code Playgroud)
(这在我达到66岁时就中断了-但是是的,语法完全不同,引入了另一个变量,等等。)