問題タブ [duck-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.
python - モジュールの「ダックタイピング」の落とし穴?
私は(少なくとも今のところは)「モジュールダックタイピング」という名前の新しい手法を試し始めたところです。
例:
メインモジュール
モジュールabc
モジュールabc
では、明示的にする必要はありませんimport req
。パッケージ階層のどこにあってもかまいません。もちろん、これにはある程度の規律が必要です...
この手法を使用すると、階層内でパッケージを簡単に再配置できます。
私を待っている落とし穴はありますか?例:Python3Kへの移行
更新:さらにテストを行った後、パッケージの依存関係をに直接挿入することに戻りましたsys.path
。
coldfusion - ダックタイピングColdFusionでの入力
ダックタイピングとは何ですか?ColdFusionはどのように関連していますか?
c# - 最新の C# ダックタイピング ライブラリ
バージョン 4.0 未満の C# のダック タイピングに関する現在の最先端技術は何ですか?
私はDuck Typing Projectについて知っています。BLTookitにはそのための何かがあることは知っていますが、DLR 言語と C# 4.0 以外に本当に悪いものが欠けているかどうか知りたいです。
c# - C# には Scala の構造型付けに相当するものがありますか?
Scala では、次のように構造型を定義できます。
type Pressable = { def press(): Unit }
これは、次のように、Pressable である何かを引数として取る関数またはメソッドを定義できることを意味します。
def foo(i: Pressable) { // etc.
この関数に渡すオブジェクトは、その型で定義された型シグネチャに一致する press() というメソッドを定義している必要があります。引数をとらず、Unit (Scala バージョンの void) を返します。
構造型をインラインで使用することもできます。
def foo(i: { def press(): Unit }) { // etc.
基本的に、プログラマーはダックタイピングのすべての利点を享受しながら、コンパイル時の型チェックの利点を得ることができます。
C# には似たようなものがありますか? 私はグーグルで検索しましたが、何も見つかりませんでしたが、C# について詳しく知りません。ない場合、これを追加する予定はありますか?
perl - ダック型言語で静的型付けの側面をシミュレートする
現在の仕事では、オブジェクトに大きく依存する一連の Perl スクリプトを作成しています。(Perl のbless()
ハッシュを使用して、可能な限り OO に近づけます)
さて、これをより適切に表現する方法がないため、私の会社のほとんどのプログラマーはあまり賢くありません。さらに悪いことに、彼らはドキュメントを読むのが好きではなく、他の人のコードを理解するのに問題があるようです。カウボーイコーディングはここでのゲームです. 彼らが問題に遭遇してそれを修正しようとするときはいつでも、実際には何も解決せず、通常は事態を悪化させる恐ろしい解決策を思いつきます。
これにより、率直に言って、ダックタイプの言語で書かれたコードを信頼していません。例として、オブジェクトの誤用に対して明示的なエラーが発生しないという問題が多すぎます。たとえば、 typeA
に memberfoo
があり、 のようなことをするとinstance->goo
、すぐに問題に気付くことはありません。null/未定義の値が返され、おそらく原因を見つけるのに 1 時間を無駄にするでしょう。その後、元の問題を適切に特定できなかったため、別のものを変更することになります。
そこで私は、スクリプト言語を維持し (その急速な開発が利点です)、オブジェクトが適切に使用されていない場合に明示的なエラー メッセージを表示する方法についてブレインストーミングを行っています。コンパイル段階や静的型付けがないため、エラーは実行時に発生する必要があります。ユーザーが「このオブジェクトには X がありません」という非常に明確な通知を受け取る限り、私はこれで問題ありません。
私の解決策の一部として、メソッド/変数を使用する前に存在するかどうかを確認する必要はありません。
私の仕事は Perl ですが、これは言語にとらわれない可能性があると思います。
c++ - C ++またはその他の言語でのオプションの構造型付けの可能性は?
C++ でコンパイラに Ogre::Vector3 IS_SAME_AS SomeOtherLIB::Vector3 を伝える方法は? 私はそれを感じます..構造型ではないc ++のような言語では、それが理にかなっている場合があります。
通常、ソートまたは独自の Vector3 実装を提供する 4 つ以上のライブラリを使用するゲーム開発者として。コードには、ToOgre、ToThis、ToThat 変換関数が散らばっています。それは、最初に発生するべきではない多くの Float3 コピーです。
C ++または他の言語では、ある型から別の型に変換(コピー)する必要はありませんが、これは本質的に同じです。ただし、ほとんどの優れたゲーム開発ライブラリは c/c++ 用であるため、C++ でのソリューションはどれでも構いません。
dynamic - 動的オブジェクトのC#4を使用したダックタイプのテスト
動的オブジェクトを使用したC#での簡単なダックタイピングの例が必要です。動的オブジェクトには、実行を試みる前に、探している値、プロパティ、またはメソッドの名前の単一の文字列パラメーターを持つHasValue / HasProperty/HasMethodメソッドが必要であるように思われます。私はtry/catchブロックを避け、可能であればより深い反射を避けようとしています。動的言語(JS、Ruby、Pythonなど)でのダックタイピングでは、プロパティ/メソッドを使用する前にテストし、デフォルトにフォールバックするか、制御された例外をスローするのが一般的な方法のようです。 。以下の例は基本的に私が達成したいことです。
上記のメソッドが存在しない場合、これを行う動的用の事前に作成された拡張メソッドを持っている人はいますか?
例:JavaScriptでは、オブジェクトのメソッドをかなり簡単にテストできます。
C#で同じことをするにはどうすればよいですか?
c# - Duck Typing DynamicObject 派生
私は、派生物が遅延ロードできるプロパティを指定できるようにするクラスを作成しました。コードは次のとおりです。
そして派生クラス:
これは、プロパティ値の取得と設定には問題なく機能しますが、暗黙的にキャストすると RuntimeBinderException が発生するか、SelfHydratingEntity を T に明示的にキャストして InvalidCastException が発生します。
DynamicObject.TryConvert メソッドをオーバーライドできることはわかっていますが、このメソッドに正確に何を入れればよいのか疑問に思っています。今日、ダック タイピングについて多くのことを読み、いくつかのライブラリを試しましたが、この特定のシナリオでは機能するライブラリはありません。私が今日試したすべてのライブラリは、「get_」および「set_」メソッドを呼び出す Reflection.Emit を使用してラッパー クラスを生成し、自然にリフレクションを使用して、ラップされたインスタンスでこれらのメソッドを見つけます。もちろん、SelfHydratingEntity には "get_" および "set_" メソッドが定義されていません。
だから、このようなことが可能かどうか疑問に思っています。SelfHydratingEntity のインスタンスを T にキャストする方法はありますか? 私はこのようなものを探しています:
duck-typing - ダックタイピングなしのダイナミックタイピング?
私は、実行時にオブジェクト/非オブジェクト指向構造の型情報をチェックし、ある種の型エラーをスローすることを意味する動的型付けに慣れています。別のタイプの動的型付けはありますか (詳細を参照してください)。