問題タブ [language-details]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
7181 参照

c++ - C++ の chars の整数値の範囲

私はThe C++ Programming Languageを読んでいますが、その中で Stroustrup は、実装に応じて、char の int 値が 0 から 255 または -127 から 127 の範囲になる可能性があると述べています。これは正しいです?-128 から 127 の範囲である必要があるようです。そうでない場合、なぜ 2 番目の実装の可能性で 256 ではなく 255 の値しか使用できないのでしょうか。

0 投票する
5 に答える
39281 参照

c++ - (void) 0 が C および C++ で無操作なのはなぜですか?

NDEBUGが定義されている場合、内部的に として定義されているglibcの debug printfs を見てきました。同様に、for Visual C++ コンパイラもあります。前者は GCC と VC++ コンパイラの両方で動作しますが、後者は VC++ でのみ動作します。これで、上記の両方のステートメントが操作なしとして扱われ、それぞれのコードが生成されないことがわかりました。しかし、ここで疑問があります。(void) 0__noop

の場合__noop、MSDN は、コンパイラによって提供される組み込み関数であると述べています。〜に来て(void) 0、コンパイラによって何も操作されないと解釈されるのはなぜですか? それはC言語のトリッキーな使用法ですか、それとも標準はそれについて明示的に述べていますか? それとも、それはコンパイラの実装と関係がありますか?

0 投票する
3 に答える
1784 参照

python - 一時参照はPythonで自動的にクリアされますか?

これは基本的に、臨時職員の寿命に関する質問です。関数がオブジェクトを返すが、参照が変数に割り当てられておらず、返されたオブジェクトのメソッドを呼び出すためにのみ使用される場合、一時参照は自動的にクリアされますか?

具体的な例を挙げると、次の一連のメソッド呼び出しがあるとします。

行が次のように記述されているかのように、への呼び出しが終了o.method_a()すると自動的にクリアされるによって返される一時的な参照です。method_b()

編集:一般的な回答に興味があります。CPython は、参照カウントが 0 になるとすぐにオブジェクトをファイナライズします。他の Python 実装では、オブジェクトをすぐにファイナライズしない場合があります。Python 言語は C++ のようなもので、作成されたステートメントの最後で一時オブジェクトが破棄されることを保証するものなのだろうかと思います。(Python を除いて、問題は一時参照が作成されたステートメントの最後にクリアされるかどうかです。)

C++ では、同様のコードを次のように実装できます。

C++ 標準では、「一時オブジェクトは、作成された時点を (語彙的に) 含む完全な式を評価する最後のステップとして破棄されます。これは、その評価が例外のスローで終了した場合でも当てはまります。」この例では、std::shared_ptr<B>への呼び出しによって作成された一時オブジェクトA::method_a()が、 full-expression の評価の最後にただちに破棄されることを意味しますo.method_a()->method_b();。a の破棄とstd::shared_ptrは、共有オブジェクトへの参照をクリアすることを意味します。

0 投票する
4 に答える
44266 参照

python - When should I use @classmethod and when def method(self)?

While integrating a Django app I have not used before, I found two different ways to define functions inside the class. The author seems to use them both distinctively and intentionally. The first one is the one that I myself use a lot:

The other one is the one I never use, mostly because I do not understand when and what to use it for:

The classmethod decorator in the python documentation says:

A class method receives the class as the implicit first argument, just like an instance method receives the instance.

So I guess cls refers to Dummy itself (the class, not the instance). I do not exactly understand why this exists, because I could always do this:

Is this just for the sake of clarity, or did I miss the most important part: spooky and fascinating things that couldn't be done without it?

0 投票する
5 に答える
1215 参照

java - ジェネリック型の配列を作成できないのはなぜですか?

要するに、これはコンパイルされません:

それは下位互換性の問題によるものですか、それともそれを妨げる言語設計の基本的なものですか?

0 投票する
2 に答える
116 参照

java - 「@」記号はJava言語パーサーでどのように正しくトークン化されますか?

私は字句構文の仕様に従って、Java ソース コード パーサーに取り組んでいます。

ただし、注釈にこだわっています。関連するルールは次のとおりです。

@しかし、字句仕様のどこにも言及されている記号は見当たりません。トークン化の正しいルールは何ですか@、またはそのようなルールはどこにありますか?

このためのトークン定義を簡単に追加できることに気付きました。しかし、可能であれば、仕様に従って正しく実行したいと思います。

0 投票する
1 に答える
4609 参照

dart - サブクラスで柔軟に拡張できるように、抽象クラスのコンストラクターを作成する方法

Stack永続的なデータ構造を実装しようとしています。これを代数データ型として実装したいので、非空という 2 つの具体的なサブタイプがあります。

このコードは、具体的な実装で 2 つのエラーを発生させます。

この問題に対処していると思われるサンプル コードを見つけたので、Stack<T>クラスにパラメーターなしのコンストラクターを配置して修正しました。

しかし今_EmptyStack<T>、これは定数であるコンストラクターに問題を引き起こします:

さらに、追加されたStack()コンストラクターにより、クラスを mixin として使用できなくなります。

これらの制限は、クラスの作成者がクラスを拡張する方法について考えるよう強制しているようです。パッケージからクラスを拡張する方法は、Listこの結論を裏付けているようです。拡張に使用する別のクラス全体があり、クラス自体dart:collectionを直接拡張することはできません。List

私の質問は、上記の問題よりも一般的なものです。クラスを柔軟に拡張できるようにするには、どうすればクラスを作成できますか? これには、次のような機能の使用を許可することが含まれます。

  1. スーパークラスのファクトリーコンストラクター
  2. サブクラスの通常のコンストラクタ
  3. constサブクラスのコンストラクタ
  4. ミックスインとして使用する

mixin としての使用が不可能であるか、望ましくないことさえあることは理解していますが、他の点は依然として有効です。最も重要な問題はextend、ファクトリ コンストラクタを持つクラスを作成できない理由です。これは、私がよく知っている他のオブジェクト指向言語とは異なる動作です。

関連する質問:

編集: GünterZöchbauerの回答のおかげで、コードが改善されたため、完全に機能するようになりました(以下を参照)。私が今残されている最も重要な質問は、なぜファクトリ コンストラクターがクラスを拡張する機能を壊すのかということです。そして、それを回避する方法(基本クラスをインターフェースとして使用する以外に)?ポイントを作るためのより簡単な例:

このコードではすべて問題ありません。Baseしかし、時間内にクラスに戻り、ファクトリ メソッドを追加したいとしましょう。

拡張する各クラスBaseは、 のために壊れていunresolved implicit call to super constructorます。私は何をしますか?

参照用に元の質問から修正されたコード:

0 投票する
2 に答える
83 参照

matlab - MATLAB で参照による代入が発生するのはいつですか?

これは MATLAB 言語に関する質問です。MathWorks の「入門」チュートリアルを進めていますが、期待に反する奇妙な「参照による代入」動作 (適切な用語がないため) に気付きました。

以下では、最初に括弧式を評価し、論理配列 [1 0 1 1 1 0 0] を生成し、次にインデックスを付けて結果を取得していると思いますv1。ここまでは順調ですね。

驚いたのは以下。実行すると、ans (デフォルトの結果変数、無名変数の一種) が[4 1 3 4]ステートメントの左側の値である値を取得することがわかります。割り当てがansにのみ書き込まれることを期待しますが、代わりに参照によって通過し、参照対象の配列に書き込みますv1

もちろん、これは他の言語と同様です。構文ではprint a[3]の値を取得することを意味しますa[3]a[3] = 1、構文では に新しい値を代入することを意味しますa[3]。その意味で、唯一の「新しい」部分は、MATLAB がほとんどの言語よりも高度なインデックス式を使用できることです。

ここで紛らわしいのは、MATLAB が式を両方の方法で明確に評価することです。インデックス付きの値を取得してansに格納しますが、それを無視して、右側の値をインデックスによって参照される場所に配置します。

式を 2 回評価したり、舞台裏で他の魔法を実行したりせずに、これを行う方法がわかりません。評価の順番・ルールを把握している気がしません。

「本当に」何が起こっているのかについての洞察をありがとう。