なぜパスカル同じメソッドのパラメータの識別子名とクラスのデータメンバを禁止していますか?
-
20-09-2019 - |
質問
type
TPerson = class(TObject)
name : string;
constructor create(name : string);
end;
コンパイラのエラーが表示されます。
私はself
またはthis
ポインタ/参照がその明確にするため、十分に良いと思います。だから、そうすることの利点は何ですか?
編集:もう一つの問題は、このポリシーを展開する他の言語が何であるかを示すことができた。
?解決
パラメータ名がクラスメンバをシャドウする名前の衝突を防ぐために。それはちょうどこのように起こることができないと、すべての名前があいまいでます。
パスカルはボンデージ-と規律の言語であることを覚えておいてください。これらは、一般的なエラーを防ぐためにしようとするように設計されています。
の知覚の問題を防止するための別のオプションは、Pythonが何をするかです:あなたはthis
を持つすべてのインスタンスメンバへのアクセスの前に付けるためにのHAVE のをするようself
またはself
でインスタンスメンバーの資格を義務付ける
私は、しかし、その制限と他の言語を知りません。しかし、いくつかの言語機能は確かにユニークです。例えばチェック例外もあります。
所属していません StackOverflow