問題タブ [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 - 動的言語 IDE、特に PyDev の Python でのオートコンプリート
私は Python は初めてで、Java を含む静的型付け言語のバックグラウンドがあります。
機能/人気などを確認した後、Eclipse の PyDev を IDE として決定しました。
オートコンプリートがビルトインに対して適切に機能していないように見えることに唖然としました。たとえば、次の後にデータファイルで automcomplete を試した場合:
datafile = open(directory+"/"+account, 'r') datafile.
有用な方法は提案されていません (例: realines)。callのようなものだけ。
私は、クラス定義にジャンプし、多くのオートコンプリートを使用してクラスが何をするかをすばやく確認することで、言語を学習することに慣れています。私の PyDev 'インタープリター' は 'forced builtins' でうまくセットアップされています。
PyDev でビルトインのオートコンプリートを取得することは可能ですか? IDE へのアプローチが間違っているのでしょうか。つまり、側でインタープリターを実行し、それを使用してテストする必要がありますか? これまでのところ、IDE は弱いように見えました。たとえば、私の新しい Mac では 2 分後に IDLE セグメンテーション違反が発生しました。経験豊富な Python 開発者がなじみのない (組み込みの) モジュールを探索するときに何をするかを知りたいです。これにより、Python に対する最初の魅力を再考する必要があります。簡単な探索で学べる言語が好きです!
ありがとう、
python - Pythonでメソッドの実装を要求するにはどうすればよいですか?
Pythonでダックタイピングを使用しています。
さまざまなオブジェクトがとして渡されるobject_to_flag
場合、そのすべてに、、is_active
属性があります。彼らはまた、方法を持っています。is_spam
is_offensive
cleanup()
渡すオブジェクトはすべて同じ基本クラスを持っています(Google App Engineのdbオブジェクトです)。
cleanup()
メソッドを抽象化して、子が実装を提供する必要があるこれらすべてのオブジェクトに対して同じ親クラスを持つことができるよう にするにはどうすればよいですか?
おそらくもっと重要なのは、これは「pythonic」ですか?このルートに行くべきですか、それともダックタイピングだけに頼るべきですか?私のバックグラウンドはJavaで、Pythonのやり方を学ぼうとしています。
ありがとう!
ruby - 一般に、Ruby で「nil:NilClass の未定義メソッド 'some_method'」を回避する
Ruby のダックタイピングは素晴らしいですが、これは私が尻を噛む唯一の方法です。長時間実行されるテキスト処理スクリプトまたは何かを実行すると、数時間後に予期しない一連の状況が発生NoMethodError
し、変数が になるためにスクリプトが at で終了しますnil
。
いったん問題が発生すると、通常は簡単に修正できますが、これらをより適切に予測するか、少なくともこれらの種類のエラーをより適切に処理できれば、より良い結果が得られます。質問があいまいで申し訳ありませんが、この種のエラーは私にはあまりにも頻繁に発生するため、それを回避する良い方法があるかどうか疑問に思っています.
Ruby のこの種の「型エラー」に関連するベスト プラクティスはありますか?
ruby - Ruby クラスの型と case ステートメント
違いは何ですか
と
なんらかの理由で、これらのうちの最初の 1 つが機能する場合と 2 つ目が機能しない場合と、2 つ目が機能する場合と 1 つ目が機能しない場合があります。なんで?それを行う「適切な」方法はどれですか?
programming-languages - ダックタイピングとは何ですか?
オンラインでソフトウェアのランダムなトピックを読んでいるときに、ダックタイピングという用語に出くわしましたが、完全には理解していませんでした。
「ダックタイピング」とは何ですか?
python - パラメータを検証するPythonの方法はシーケンスですが、文字列ではありません
DBテーブルのリストをパラメーターとして取得し、これらのテーブルで実行されるコマンド文字列を返す関数があります。例:
次のようなものを返す必要があります:
これはを使用して行われtables_string='-t '+' -t '.join(tables)
ます。
関数が(タプル)のtables=('stackoverflow')
代わりに(文字列)で呼び出されると、楽しみが始まります。これにより、次のようになります。tables=('stackoverflow',)
文字列自体が繰り返されているためです。
このSOの質問は、型にassertを使用することを示唆していますが、duck-typeの規則に違反しているため、Pythonicで十分かどうかはわかりません。
洞察はありますか?
アダム
c# - Type がインターフェイスをサポートできるかどうかを解決する最善の方法は? (ダックタイピング)
を使用して実行時に型を構築していますReflection.Emit
。エンド ユーザーは、基本型と、新しい型がサポートするインターフェイスを提供します。基本型がサポートできないメンバーがインターフェイスに含まれている場合は、静的フィールドに格納されているデリゲートを呼び出すスタブ メソッドを作成します (15 個以下のパラメーターを持つ非ジェネリック メソッドのみをサポートし、ref パラメーターまたは out パラメーターを使用しないのが現在のパラメーターです)。要件. この制限で問題を持ち出さないでください. デリゲートは baseType の最初のパラメータを受け取ります.これは, ユーザーが型を構築しようとする前に与えることができます.
ただし、型によって満たされるインターフェイス メンバーのデリゲート スタブを作成することは避けたいと思います。例えば
ここで私のビルダーに送っていただければ、グースがインターフェイスを満たしているため、 のスタブを作成しGoose
ません。new[]{typeof(IDuck)}
void Quack()
Goose は IDuck を実装していないため、インターフェイス マッピングはTypeBuilder
機能しません。構築する必要がある型ではサポートされていないため、新しく構築された型にインターフェイス マッピングを要求することはできません。
リモートで効率的な方法でこれを解決するにはどうすればよいですか? 一般に公開されているメンバーのみを調査する必要があり、型が同じメソッドを持つインターフェイスを明示的に実装している場合、それをターゲットとして使用すべきではないと想定できます。(例えば、Goose が実装されている場合void IGoose.Quack()
、それは のターゲットと見なされるべきではありませんvoid IDuck.Quack()
)。(とにかく、 BindingFlags.Public | BindingFlags.Instance
これらの要素を除外するには十分なはずです)。
java - Javaでのダックタイピングのシミュレーション
問題:動的言語(Groovy、JavaScriptなど)と同じように、Javaオブジェクトの任意のプロパティ/フィールドにJavaで一般的にアクセスできるようにしたいと思います。この配管コードを書いている時点では、それがどのタイプのオブジェクトであるか、またはプロパティ/フィールド名が何であるかはわかりません。しかし、私はそれを使用するときにプロパティ/フィールド名を知っています。
私の現在の解決策:これまでのところjava.beans.Introspector
、Bean / POJOのプロパティを取得し、それらをとして公開するために使用する単純なラッパークラスを作成しましたMap<String, Object>
。粗雑ですが、単純なケースで機能します。
私の質問は、リフレクション/マップへの変換以外に、この問題に取り組むための他の方法論は何ですか?
javax.script.*
この道をさらに進む前に、Rhinoから何かを共食いする方法を誰かが知っているかどうか、またはおそらくこの概念の実装をよく考えているかどうかを知りたいと思います。あるいは、私が考えていなかったまったく異なるアプローチかもしれません。
編集:はい、私はリフレクションに精通しています(とにかく、Introspectorが内部で使用しているものだと思います)。他によく考えられた解決策があるかどうか、私はただ興味がありました。
編集2:最も一般的な回答には、1)直接またはヘルパークラスを介したリフレクション、および/または2)目的のクラスメンバーを実装するインターフェイスへのマッピングが含まれるようです。Groovyの活用についてのコメントには本当に興味があります。Groovyには真のダックタイピングがあり、JVM言語であるため、Groovyで単純なヘルパーを作成し、Javaから呼び出す方法はありますか?これは本当にクールで、おそらくより柔軟で、パフォーマンスが向上します。
回答:マイクの回答は、最も近い完全な概念であるため、最高のものとしてマークしました。私はおそらくこの特定のケースではそのルートに行きませんが、それは確かに有用なアプローチです。そこにも役立つ情報がたくさんあるので、これを見ている人は必ずここの会話を読んでください。
ありがとう!
reflection - F#での一般的なダックタイピング?
let inline と member 制約を使用すると、既知のメンバーに対してダック タイピングを行うことができますが、次のようなジェネリック関数を定義したい場合はどうでしょうか。
let ダックラッパー<'a> アヒル = ...
署名 'b -> 'a を使用し、戻り値は 'a (インターフェース) を実装し、duck への呼び出しを転送するオブジェクトになります。
Reflection.Emit を使用して C# でこれを実行しましたが、F# のリフレクション、引用符、またはその他の構成要素を使用すると簡単になるかどうか疑問に思っています。
これを達成する方法について何か提案はありますか?
Timsの回答を読んだ後に編集 して、もう少し詳細を説明したいと思いました
引用を使って助けることについて書いたとき、私が考えていたのは次のようなものでした:
!! 引用符を関数に変換する演算子であり、 %expr はメソッドの作業単位です。式を関数に変換することはできますが(推測します)、方法がわかりません
IInterface は 'a になるので、もちろん、これでうまくいくわけではありません。F# リフレクションが便利な関数を持ち、型オブジェクトといくつかの関数値に基づいて型を構築できることを願っています。
EDIT Tomas Petricekの回答の更新として、私のニーズを説明するコードをいくつか提供します
これは、 DCIの教科書の例をF# に移植する試みです。ソースと宛先は DCI ロールです。特定のコントラクトに準拠するデータ オブジェクトは、それらを再生できるという考えです。この場合、契約は簡単です。source には reduceBalance というメンバー関数が必要であり、destination には increaseBalance というメンバー関数が必要です。この特定のケースでは、let inline とメンバーの制約を使用してそれを実現できます。しかし、インターフェイスとオブジェクトを指定した一連の関数を書きたいと思います。この場合、それはソース (オブジェクトとして) であり、
タイプとして。結果は、ソース オブジェクトの同じ名前のメソッドにメソッド呼び出しをパイプする sourceContract 型のオブジェクトになります。
ruby - Ruby は包含ポリモーフィズムをサポートしていますか?
Ruby は「包含ポリモーフィズム」をサポートしていますか? これはダックタイピングと同じですか?
そうでない場合、Ruby におけるポリモーフィズムとダックタイピングの違いは何ですか?
誰かが私の例を以下に説明してください: