with (マクロ)
パッケージ: CURL.LANGUAGE.COMPILER

1 つまたは複数の変数に一時的に新しい値を指定して、コードを実行します。

構文

"with" マクロは、次の構文を使用します。

{with var1 = value1 [, var2 = value2]* do body }

説明

var の現在の値が保存されてから var それぞれに新しい値が割り当てられ、body が実行され、実行中にエラーが発生した場合でも、最後には各 var の元の値が、変数が変更されたときと逆の順序で復元されます。body の最後のステートメントの値が存在する場合、これは with の値として生成されます。 var が、前の with ステートメントの実行で設定されなかったオプションを参照する場合(set? を参照してください。)、元の値に設定する代わりに unset を使用して置き換えられます。この振る舞いは、バージョン 4.0 と前の Curl API でサポートされていませんでした。それらのバージョンでは、オプションには元の値が設定されます。オプションの設定や解除に関する詳細については、オプション を参照してください。

注意事項

元の値を復元している間にエラーが発生すると、障害の原因となります。通常、これは問題にはなりませんが、いずれかの変数がゲッター/セッターで、セッターがかなり複雑な場合に問題になる可能性があります。

次の例は、変数の値やオブジェクトのフィールドの値を、永続的に変更するのではなく、一時的に変更する方法を示しています。

{do
    let x:int = 1

    {with x = 11 do
        {assert x == 11}
    }

    {assert x == 1}

}