Language agnostic 在编程语言中是否存在try循环`

Language agnostic 在编程语言中是否存在try循环`,language-agnostic,programming-languages,Language Agnostic,Programming Languages,我注意到编程中一种非常常见的模式如下: bool continue = true; while (continue){ try{ do something break; catch(){ do something else } } 这里有很多用于两行实际代码的语法 是否有一种(有些常见的)编程语言,它有一个try循环(可能用其他名称),在抛出错误时重复X,并且可以在每次错误后执行Y。在C#中,您可以将try方法模式封装在一个循环中,从而实现这一目标 下面是一

我注意到编程中一种非常常见的模式如下:

bool continue = true;
while (continue){
   try{
   do something
   break;
   catch(){
   do something else
   }
}
这里有很多用于两行实际代码的语法

是否有一种(有些常见的)编程语言,它有一个try循环(可能用其他名称),在抛出错误时重复
X
,并且可以在每次错误后执行
Y

在C#中,您可以将try方法模式封装在一个循环中,从而实现这一目标

下面是一个队列示例,该队列提供了一个预计会崩溃的TryDequeue方法,例如,因为它可能需要在不可靠的介质(网络或文件系统)上读取

dequeueandrowexceptionnerrors
方法是可能抛出要从循环中隔离的异常的部分

int element;
while(myQueue.TryDequeue(out element))
{
    // process element
}
下面是队列类中的TryDequeue方法

bool TryDequeue(out int element)
{
    try
    {
        // dequeue logic
        element = DequeueAndThrowExceptionOnErrors();
        return true;
    }
    catch
    {
        // error handling
        element = 0;
        return false;
    }
}
在C#中,您可以将try方法模式封装在一个循环中,以实现此目标

下面是一个队列示例,该队列提供了一个预计会崩溃的TryDequeue方法,例如,因为它可能需要在不可靠的介质(网络或文件系统)上读取

dequeueandrowexceptionnerrors
方法是可能抛出要从循环中隔离的异常的部分

int element;
while(myQueue.TryDequeue(out element))
{
    // process element
}
下面是队列类中的TryDequeue方法

bool TryDequeue(out int element)
{
    try
    {
        // dequeue logic
        element = DequeueAndThrowExceptionOnErrors();
        return true;
    }
    catch
    {
        // error handling
        element = 0;
        return false;
    }
}

在tcl中,您可以发明自己的语法(当然,不是语法本身,只是一个控制结构,但从其他语言的角度来看,它看起来像是发明语法):

现在您可以有一个捕捉foreach循环:

# regular foreach looks like this:

foreach x $stuff {
    do-something-with $x
}

# our new foreach-catch looks very similar:

foreach-catch x $stuff {
    do-something-with $x
} error {
    handle-error-condition-for $x -with-error $error
}
当然,任何允许您传递代码块或函数的语言都可以实现类似的功能。下面是一个javascript示例:

function foreach_catch (array,callback,error_callback) {
    for (var i=0;i<array.length;i++) {
        try {
            callback(array[i]);
        }
        catch (err) {
            error_callback(err,x);
        }
    }
}

在tcl中,您可以发明自己的语法(当然,不是语法本身,只是一个控制结构,但从其他语言的角度来看,它看起来像是发明语法):

现在您可以有一个捕捉foreach循环:

# regular foreach looks like this:

foreach x $stuff {
    do-something-with $x
}

# our new foreach-catch looks very similar:

foreach-catch x $stuff {
    do-something-with $x
} error {
    handle-error-condition-for $x -with-error $error
}
当然,任何允许您传递代码块或函数的语言都可以实现类似的功能。下面是一个javascript示例:

function foreach_catch (array,callback,error_callback) {
    for (var i=0;i<array.length;i++) {
        try {
            callback(array[i]);
        }
        catch (err) {
            error_callback(err,x);
        }
    }
}

虽然您没有为continue变量声明名称,但我认为它几乎没有更好的效果。(虽然,你所展示的东西几乎不属于C语言,但我仍然喜欢这种风格)我不记得我知道的任何其他语言中的真的参数,但是当然,你可以使用C++中的引用参数来获得类似的结果。(虽然,你所呈现的东西几乎不属于C语言,但我仍然喜欢这种风格)我不记得我知道的任何其他语言中的真的外参数,但是当然,你可以使用C++中的引用参数来获得类似的结果。