問題タブ [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.

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

naming-conventions - ダックタイピングの使用とはどのように呼ばれますか

ダックタイピングを使用するプロセスをどのように呼び出す必要がありますか?「ダックタイピングを実行しています」または「アヒルかどうかを確認しています:)」とはどうすればよいですか。

アヒルのチェックは良くないように聞こえます、そしてタイプチェックはそれの単なる間違った名前です。

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

webforms - 無効なオブジェクト名 'aspnet_Membership'

Visual Studio と c# win フォーム (Web フォーム) を使用しています。MS 2005 Server とリーダー query.here へのオープン接続を試みます - は

そして、それらのテーブルはデータベースに存在します。オブジェクト名 'aspnet_Membership' が無効です。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Data.SqlClient.SqlException: 無効なオブジェクト名 'aspnet_Membership'。

ソース エラー:

私はイライラしています。前もって感謝します

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

php - すべての動的言語はダックタイピングをサポートしていますか?

すべての動的言語はダックタイピングをサポートしていますか?

PHPはダックタイピングをサポートしていると思います。そうですか?

0 投票する
6 に答える
773 参照

java - なぜインターフェースをJavaで宣言しなければならないのですか?

同じシグニチャを持ついくつかのメソッドを持つが、宣言されたJavaインターフェイスに対応しないクラスがいくつかある場合があります。たとえば、JTextFieldJButton(のいくつかの他の中で javax.swing.*)の両方にメソッドがあります

ここで、そのメソッドを持つオブジェクトを使用して何かを実行したいとします。次に、インターフェイスが必要です(または、自分で定義することもできます)。

私が書くことができるように:

しかし、悲しいことに、私はできません:

このキャストは違法です。クラスがそのインターフェースを実装することを宣言していないので、コンパイラーはそれがではないことを知っています...しかしそれ実際に」それを実装します。JButton CanAddActionListener

これは不便な場合があります。Java自体がいくつかのコアクラスを変更して、古いメソッドで作成された新しいインターフェイスを実装しています(String implements CharSequenceたとえば)。

私の質問は:なぜこれがそうなのか?クラスがインターフェイスを実装することを宣言することの有用性を理解しています。しかし、とにかく、私の例を見ると、なぜコンパイラーは、クラスJButtonがインターフェース宣言を「満たして」(その内部を見て)、キャストを受け入れることができないと推測できないのでしょうか?それはコンパイラの効率の問題ですか、それとももっと根本的な問題がありますか?

答えの要約:これは、Javaが何らかの「構造的型付け」(ダックタイピングのようなものですが、コンパイル時にチェックされます)を考慮に入れていた可能性がある場合です。そうではありませんでした。いくつかの(私にはわかりませんが)パフォーマンスと実装の難しさは別として、ここにははるかに基本的な概念があります。Javaでは、インターフェース(および一般的にはすべて)の宣言は、単に構造的(これらのシグニチャ)がセマンティック:メソッドは特定の動作/意図を実装することになっています。したがって、あるインターフェースを構造的に満たす(つまり、必要なシグニチャーを持つメソッドを持っている)クラスは、必ずしも意味的に満たすとは限りません。(極端な例:メソッドさえない「マーカーインターフェース」を思い出してください!)したがって、Javaは、これが明示的に宣言されているため(そしてそれだけのために)、クラスがインターフェースを実装していると断言できます。他の言語(Go、Scala)には他の哲学があります。

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

grails - Grails:ダックタイピングと多対多のコレクションクラス

私のGrailsアプリでは、人は何かを好む-そしてその何かはアイデア、決定、グループ、または別の人である可能性があります。

Javaでは、Somethingインターフェースを課して、これらの各クラスをSomethingタイプとして渡すことができるようにします。

Groovy / Grailsでは、SomethingがGroovyクラスであり、FondnessクラスがPersonsをSomethingsにマップするコレクションクラスである場合に機能していました。

この場合、ダックタイピングを活用しようとするとつまずきます。インターフェイスを強制せずに、Personをクラスのグループのいずれかにマッピングするコレクションクラスを設定するにはどうすればよいですか?

アドバイスありがとうございます!G/G開発者がこれにどのように取り組むかを聞いて興奮しています。

-明細書

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

ruby - これは Ruby のアヒルのタイピングとして正しく見えますか?

車の今後のサービスの必要性についてユーザーを更新するために、車の走行距離とサービス履歴を追跡するプログラムを作成しました。

Car、、、の 3 つのクラスがCarHistoryありCarServiceHistoryEntryます。3 つ目は簡単です。サービスに関連付けられたすべての属性 (日付、走行距離、実行されたサービスなど) を保持します。CarHistoryクラスは次のとおりです。

  1. initialize、のクラスをentryチェックする必要がありますか?
  2. ではadd_service_entry、ダック タイピング (「プログラミング Ruby」での Andy Thomas の議論のように) を採用して、aCarServiceHistoryEntryを追加できるかどうかをテストしますか? StringセットアップしCarServiceHistoryEntryて単体テストに追加する代わりに、 a を渡すことはできませんか?
  3. a の必要な属性は配列とメソッドだけなので、CarHistoryこのentriesクラスto_sをまとめて破棄してクラスに入れるべきcarでしょうか?
0 投票する
5 に答える
3618 参照

ruby - Rubyパラメータの型確認

Java のバックグラウンドを持つ私は、Ruby のメソッド パラメータに対する完全に無礼な態度に少し動揺しています。Java では、パラメーター x がメソッドが適切に機能するために必要な型であることを保証できましたが、Ruby では、x が整数、文字列、またはそれ以外のものであることを保証する方法がありません。

例: Java で absolute_value メソッドを記述したい場合、ヘッダーは次のようになります。

Rubyでは、次のようになります

この例では、Java コードで、渡されるパラメーターが「Happy Birthday!」ではないことを完全に確信できます。しかし、Ruby コードではそれがわかりません。実行時にコードがクラッシュしないように、Ruby でこの状況を防ぐにはどうすればよいですか?

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

c# - C#コンパイラでのダックタイピング

これは、C#でダックタイピングを実装またはエミュレートする方法についての質問ではありません...

数年の間、特定のC#言語機能は、言語自体で定義されたデータ構造に依存しているという印象を受けました(これは、私には常に奇妙な鶏と卵のシナリオのように見えました)。たとえば、foreachループはを実装した型でのみ使用できるという印象を受けましたIEnumerable

GetEnumeratorそれ以来、C#コンパイラはダックタイピングを使用して、オブジェクトがforeachループで使用できるかどうかを判断し、ではなくメソッドを探すことを理解するようになりましたIEnumerable。これは、鶏肉と卵の難問を取り除くので、非常に理にかなっています。

usingなぜこれがブロックとの場合ではないように思われるのかについて、私は少し混乱していIDisposableます。Disposeコンパイラがダックタイピングを使用してメソッドを探すことができない特別な理由はありますか?この不一致の理由は何ですか?

おそらく、IDisposableの内部で何か他のことが起こっているのでしょうか?

IDisposableを実装していないDisposeメソッドを持つオブジェクトがある理由を説明することは、この質問の範囲外です:)

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

objective-c - 実行時にプロトコルの適合性を確保するにはどうすればよいですか?

上記により、KVCを活用して、次のように記述できます。

[[Dog new] valueForKey:@"quacks"]; // YES

ただし、objcランタイムを使用して同じKVCメカニズムを活用し、実行時にDuckプロトコルに準拠することはできますか?