Tennent's Correspondence Principleの興味深い議論と、Neal Gafterの簡単な説明を以下に示します。
原則では、式またはステートメントは、クロージャーにラップされてすぐに呼び出されたときに、クロージャーにラップされる前と同じ意味を持つ必要があります。クロージャでコードをラップするときのセマンティクスの変更は、おそらく言語の欠陥です。
Groovy言語はこの原則に従っていますか?
Tennent's Correspondence Principleの興味深い議論と、Neal Gafterの簡単な説明を以下に示します。
原則では、式またはステートメントは、クロージャーにラップされてすぐに呼び出されたときに、クロージャーにラップされる前と同じ意味を持つ必要があります。クロージャでコードをラップするときのセマンティクスの変更は、おそらく言語の欠陥です。
Groovy言語はこの原則に従っていますか?
回答:
かなりではありませんが、ほとんど。外側のスコープでアクセス可能なすべての変数は、「this」やクラスデータメンバーなど、クロージャーでアクセスできます。ただし、return
ステートメントは、囲んでいる関数からではなく、クロージャーから返されます。それがTCPの違反であるかどうかさえわかりません。return
クロージャ内で囲みスコープから戻るCスタイルの言語は知りません。Groovyクロージャーを使用しても驚きはありません。