問題タブ [dynamic-typing]
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.
objective-c - この動的型付けのことを理解することはできません
ココアの開発者になるために面接する人のために、面接の質問のリストをまとめています。私はプログラマーですが、Objective-Cを実行したことはありません。動的型付けに関する興味深い質問に出くわしました。初歩的なはずです。試してコンパイルしましたが、どのように、なぜ機能するのかはまだわかりません。
質問は
次の手順を実行すると、コンパイル時と実行時に何が起こりますか。
デバッガーで
の出力はNSLog(@"%d",i)
、、3
の出力はNSLog(@"%@",s)
です3
。
誰かが、私がObjective-CとCocoaに完全に慣れていないが、コンピュータサイエンスにはまったく慣れていないことを念頭に置いて、コンパイラとランタイムシステムによってこれらすべてがどのように処理されるかについて説明してもらえますか?
c# - 動的型の結合
くだらない質問かもしれませんが、何か方法があれば教えていただきたいです。
スペースで区切られた多数のファイルをインポートするプロセスを容易にするために、動的な型でレイアウトを記述し、デリゲートを呼び出すパーサーにスローする簡単なスキームを考え出しました。
レイアウトは次のようになります。
すべてうまくいきます。私は現在、2 つの非常に大きな SDF をインポートする状況にあり、その構造は 85% 同一であり、最後にいくつかの違いはありません。
レイアウトを別のレイアウトに追加する方法はありますか。たとえば、次のようになります。
うまくいかないことに気付いたのは、次のとおりです。
3 つのタイプはすべて根本的に異なるため、これは明らかに機能しません。
任意のアイデアをいただければ幸いです:)
d - 動的型を返す
私は次のようなテンプレートを知っています
しかし、これはどのタイプが返されるかをユーザーに尋ねる必要があります。私は次のようにどのタイプが返されるかをメソッド内で計算したいです:
オブジェクトにキャストしてプロトタイプを変更できるかどうかわかりません。
ありがとうございます
java - パラメータを使用した実行時のJavaインスタンス化クラス
抽象ファクトリを使用して具象サブクラスのインスタンスを返しています。具象クラス名の文字列を指定して、実行時にサブクラスをインスタンス化したいと思います。また、コンストラクターにパラメーターを渡す必要があります。クラス構造は次のとおりです。
上記の私のattmeptは、次の例外をスローしています:java.lang.NoSuchMethodException: Child.<init>()
、その後にスタックトレースが続きます。
どんな助けでも大歓迎です。ありがとう!
haskell - Data.Dynamicsでポリモーフィック関数を取得するための回避策はありますか?
dynApply
からの関数Data.Dynamics
は非常に見栄えがしますが、実際には単相関数型が必要です。だから、あなたは書くことができませんでした
多態的な戻り型を必要とするコードがいくつかあります。それらは制限された形式です、例えば機能
(ここa
でb
、、、c
は具象型です)。前もって感謝します。
c++ - dynamic_cast<> が失敗する可能性があるのは、どのような状況/状況ですか?
巨大なコード ベースのバグを修正しているときに、参照の動的な型が元のDerived
型からBase
型に変わる奇妙な状況を観察しています。問題を説明するための最小限のコードを提供しています。
funcptr
は関数ポインタ ( void (*)(SomeClass&)
) です。 funcptr
非常に多くの関数を指すことができ、独自の呼び出しフローがあるため、デバッグが困難になります。
関数ポインターを呼び出した後、 の派生型が からにref
変わるのは非常に奇妙です。作業を楽にするために、 からへのオブジェクト スライスを疑ったので、ソース コード全体をピュアとして作成し、再コンパイルしました。しかし、コンパイラエラーはありませんでした。つまり、宣言されるオブジェクトはありません。Derived
Base
Derived
Base
~Base()
virtual
Base
の動的タイプref
Derived
が に変更されBase
、dynamic_cast
後で失敗する潜在的な理由は何ですか?
python - ダックタイピング: 名前の衝突を避けるには?
ダックタイピングの考え方は理解できたので、コードでもっと頻繁に使用したいと思います。ただし、潜在的な問題が 1 つあります。名前の衝突です。
オブジェクトに何かをさせたいとします。適切なメソッドを知っているので、それを呼び出して何が起こるかを確認するだけです。一般に、次の 3 つの結果が考えられます。
メソッドが見つからず、
AttributeError
例外が発生します。これは、オブジェクトが私が思っているものではないことを示しています。ダックタイピングを使用すると、そのような例外をキャッチするか、外側のスコープにそれを処理させる (またはプログラムを終了させる) ことをいとわないので、それは問題ありません。メソッドが見つかり、まさに私が望んでいることを実行し、すべてが素晴らしいです。
メソッドは見つかりましたが、必要なメソッドではありません。これは、まったく無関係なクラスの同じ名前のメソッドです。矛盾した状態が後で検出されるか、最悪の場合、プログラムが暗黙のうちに誤った出力を生成するまで、実行が続行されます。
これで、質の高い名前が結果 #3 の可能性をいかに減らすことができるかがわかります。しかし、プロジェクトが結合され、コードが再利用され、ライブラリが交換され、ある時点で 2 つのメソッドが同じ名前を持ち、完全に無関係である可能性が非常に高くなります (つまり、ポリモーフィズムで互いに置き換えられることを意図していません)。
私が考えていた解決策の 1 つは、メソッド名のレジストリを追加することです。各レジストリ レコードには、次のものが含まれます。
- メソッド名 (一意、つまり、名前ごとに 1 つのレコードのみ)
- その一般化された説明 (つまり、それが呼び出される可能性のあるすべてのインスタンスに適用可能)
- 使用する予定のクラスのセット
メソッドが新しいクラスに追加された場合、そのクラスを (手動で) レジストリに追加する必要があります。その時点で、プログラマーはおそらくメソッドが既に付けられている意味と一致していないことに気付き、必要に応じて別の名前を使用します。
メソッドが呼び出されるたびに、プログラムは名前がレジストリにあり、インスタンスのクラスがレコード内のクラスの 1 つであることを自動的に確認します。そうでない場合は、例外が発生します。
これが非常に難しいアプローチであることは理解していますが、精度が重要な場合には、役立つ可能性があることがわかります。(Python またはその他の動的型付け言語で) 試しましたか? 似たようなことをするツールはありますか?検討する価値のある他のアプローチはありますか?
注: 名前空間の汚染を回避することが正しいアプローチであるグローバル レベルでの名前の競合については言及していません。メソッド名の衝突について言及しています。これらは名前空間の影響を受けません。
python - 動的型付けの設計:リストを処理するための再帰性は優れた設計ですか?
動的型付けされたコードを維持する経験が不足しているので、私はこの種の状況を処理するための最良の方法を探しています:
(Pythonの例ですが、動的型付けされた任意の言語で機能する可能性があります)
メソッドは1つのことしか実行できないと思うので、これにはかなり不安があります。また、メソッドは本来あるべきほど読みにくいと思っています。したがって、3つの関数を作成したいと思います。最初の関数は任意のオブジェクトを取得し、他の2つの関数間で「ソート」します。1つはリスト用、もう1つは「単純な」オブジェクト用です。繰り返しになりますが、これにより複雑さが増します。
ここで最も「持続可能な」ソリューションは何ですか、そしてメンテナンスの容易さを保証するソリューションは何ですか?私が気付いていない状況のためのPythonのイディオムはありますか?前もって感謝します。
c# - IFブロック内のASP.netC#変数宣言
ASP.net C#で次のコードを使用しようとしました。
しかし、エラーが返されました。
Online
変数のスコープは宣言されているIFステートメントに限定されているため、変数を外部で使用できないことがわかりました。
試行錯誤の結果、次のコードが機能することがわかりました。
}
変数スコープがIFステートメントの終了時に終了すると予想されるため、2番目のスニペットが機能するはずがないのになぜこれが機能するのですか?
ありがとう
javascript - 動的型付け言語で関数の引数を記述する方法は?
私の質問はより Python 向けですが、JavaScript やその他のスクリプト言語に関するものかもしれません。
私は通常、静的に型付けされた言語 (Java、C++、ActionScript など) を使用して開発を行っています。
私はときどき Python を使用するのが好きで、JavaScript も時々使用する必要があります。これらは動的型付け言語です。それは何も悪いことではありませんが、通常、関数やメソッドで必要なパラメーターを理解するために多くの頭痛の種があります。いくつかのdocstringを含む自分のコードであっても発生します! おそらく、目は関数の定義以外のどこかを見なければならないからです。
もちろん、答えはドキュメントにあるはずです。しかし、まったく明確でない場合や、ダックタイピングを使用しているため、ドキュメント自体を書くのが難しい場合があります(「最初のパラメーターは、arg がは文字列です」)。私が非常に望んでいるのは、言語自体の内部に一種の引数の記述があることです (たとえそれが ActionScript のようにオプションであっても)。
関数/メソッドの引数を明確に説明するためのベスト プラクティスは何ですか?
特別なデコレータ (Python を使用している場合) を作成して、それを使用するときにデータの型をチェックすることについてはどうですか (ただし、書き込み時ではなく実行時に使用されるため、とにかくポイントは何でしょうか)?
問題にすべきではないと思いますか?現在のdocstring以上のことをすると開発者が混乱するのでしょうか、それとも私の心があまりにも静的な型付けを重視しているのでしょうか?