私が尋ねる理由は、メソッドのパラメータ宣言でのみ有効ですか?私は "params"と呼ばれる関数本体の変数を作成しようとしていましたが、もちろんこれは大したことではありません。MSがそれをグローバルなキーワードにしてコンテキストにしない理由を疑問に思っています。paramsキーワードが文脈上でないのはなぜですか?
答えて
tvanoffsonの答えは、「パラメータ」をコンテキストにすることは難しいと推測しています。それは実際にはそれほど難しくありません。次のように考えてみてください。
void M(params x)
この場合、想定していることは、まず「params」タイプを見つけることです。私たちが見つけることができれば、素晴らしい、我々は完了です。もしできなければ、少し問題があります。たとえばxの代わりにxを指定したとします。
void M(params Int32)
明らかにこれはエラーですが、どのようなエラーですか? Int32がパラメータ名であると仮定し、 "型がありません"というエラーを出すべきですか? Int32が型であると仮定し、型が配列型でなければならないというエラーを出し、識別子がないとしますか? 'params'という名前の型がないというエラーを返すべきですか?ここで正しいことは何ですか?われわれは明らかに何かを描くことができるが、明らかではない。
文脈上のキーワードでは厄介なエラーケースです。成功事例を正常に動作させることは、実際はかなり簡単です。
しかし、実際にはそれほど多くはありません。コンテキストにすることはコンテクストにするのは本当に大きな勝利ではありません。すべての人が "set"や "value"のような名前のローカル変数を作ろうとしていると仮定していたため、 "set"と "value"をコンテキストにすることは大きな勝利でした。 "params"は英語の単語でもないので、誰もそれを使いたくないようです。文脈的にすることに大きな利点はないので、機能のコストは正当化されません。
ありがとうエリック。私は本当にあなたが念頭に置いていたことを読むことを望んでいました。私には、有効なケースは1のように思えます。利用できるparamsタイプはありますか? 2.そうでなければ、タイプ[]の形の型があり、識別子が続きます。私はあなたのような専門家ではありませんが、これがすべてのケースを網羅していると思いますか?また、あなたは正しいです、それは英語の単語ではなく、ちょうどパラメーター/(s)を書く代わりに、いくつかのコードで役に立つと思っただけです。 –
paramsキーワードはメソッドパラメータ宣言でのみ役立つように見えますが、とにかく、実際にはインスタンス名にキーワードを使用させるのは良い考えではありません。
params Customers = DB.GetCustomerList();
またはその他の同様のローカルスコープでparams
を許可:
おそらく彼らは、この中にC#8.0のようなものが持っている能力を確保しています。
しかし、それはどうしますか?あなたが示したローカルスコープでそれを使用する私には、それほど意味がないでしょうか?私はわかりません。 BtwはいつC#8.0が出ていますか? :O –
私のクリスタルボールが正確なら2017年頃だと思います。 –
Joan - 良い質問です。私はそれが何をするか分かりません。実際には、私は文法エラーのためにC#8.0でコード行がコンパイルされるとは考えていません。 – Flipster
他のキーワードについても同様の質問があります。たとえば、クラス宣言でしか使用されないため、「クラス」はコンテキストに依存しないのはなぜですか?
私にはキーワードがキーワードです。私は、コンパイルの字句解析の部分を、そのコンテキストを認識する必要がなくて済むように大幅に簡素化すると思います。
var @params = new int[] { 1, 2 };
ありがとうございますが、クラスが文脈的であった場合、ネストされたクラスの使い方をどのように分離しますか?しかし、paramsを使うと、他の場所を使うことはできません。それを区別するのは簡単なようですが、私はEric Lippertのようなコンパイラのマエストロではありません。 –
私はあなたが典型的なクラス宣言構文を探すことによって 'クラス'文脈を作ることを試みることができると思う:[accessibility modifier] class [class name] {}。しかし、私はこれが実際に実現可能かどうかを知るためにコンパイラーの仕様に立っているわけではありません。 –
わかりました。 –
エリックリペットはcontextual and reserved keywordsをカバーするブログ記事を持っており、その:さておき、あなたは「paramsは」(またはその他の予約キーワード)という変数を宣言することができるように@
記号を使用することができるよう
歴史。 paramsが予約済みのリスト(1.0以降)にある理由を明示的に説明していませんが、それはとなる予約語のセットに属していることを意味します。
ありがとう、予約語は何のためですか?私はそれが将来的に新しい潜在的な用途のために予約されていることを意味したと思った? –
@ジョアン - 一部のものもありますが、ほとんどが「この目的のためだけに予約されています」のように予約されています。 – tvanfosson
- 1. この文脈では、これはどのようなキーワードですか?
- 2. このコードで文脈を失うのはなぜですか?
- 3. Alamofire 4.0 Router文脈の種類が文脈なしであいまいです
- 4. なぜ文脈は文脈不変であるときに "++ x"から "x ++"を好むのですか?
- 5. Outlookアドインがデスクトップクライアントで文脈上表示されない
- 6. Swiftに「new」キーワードが必要ないのはなぜですか?
- 7. Kotlinに並行性キーワードがないのはなぜですか?
- 8. なぜこのタプルは、迅速な文脈がなくてもあいまいですか?
- 9. なぜLimitキーワードがMysqlで動作しないのですか?
- 10. なぜ、c#のキーワードではないのですか?
- 11. 私のコンピュータ上で文脈を模擬することができない
- 12. 文の種類が文脈なしにあいまいです
- 13. なぜswitch文はtrueキーワードでのみ動作しますか?
- 14. Javaでは、なぜassertはキーワードであり、メソッドではないのですか?
- 15. backgone jsモデルでinstanceofキーワードが機能しないのはなぜですか?
- 16. mySQL 5.1.48でsignalキーワードが機能しないのはなぜですか?
- 17. なぜparamsが正しく読み込まれていないのですか?
- 18. なぜ文脈によってstring.Normalizeが一貫していないのですか?
- 19. laravelのさまざまな文脈で "use"キーワードを使用する背後にあるコンセプトは何ですか?
- 20. JavaScriptの引数の前にvarキーワードがないのはなぜですか?
- 21. 次の文脈でキーワード 'this'を使用する意味
- 22. Rails - なぜajaxがGETリクエストにparamsを送信しないのですか?
- 23. 文脈のない奇妙なグラデルビルドエラー
- 24. statsmodels select_order関数がARモデルのparamsと異なるのはなぜですか?
- 25. なぜthisキーワードがjavaのmainメソッドで許可されないのですか
- 26. file_put_contentsが上書きされないのはなぜですか?
- 27. なぜ@angular \ router paramsのActivatedRouteが観測可能ですか?
- 28. クラスプロパティで「new」キーワードを使用できないのはなぜですか?
- 29. 文字列が同じでないのはなぜですか?
- 30. なぜこれが回文ではないのですか?
なぜか分かりませんが、本当にこれを変数名として使用したい場合は、変数名を@:int @params = 1; – Derrick