問題タブ [enrich-my-library]
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.
scala - クロス積ベースのメソッドを scala コレクションに追加するにはどうすればよいですか?
願わくば、これが図書館の売春斡旋に関する簡単な質問になることを願っています (このテーマに関する他の質問は、私の現在のスキル レベルを超える回答を生成する傾向があるためです)。
私がやりたいのは、コレクションとそれ自体の外積をマッピングすることだけです。
だから私はTraversable
こうやってポン引きしようとしました:
しかし、それは機能しません (暗黙の変換を行っていません)。なぜそうでないのかわかりません (私は scala にかなり慣れていません)。また、 Enriching Scala collections で提案されている方法を、次のような方法で試しました。
、しかし、それは私の(より単純に見える)方法と同じエラーをスローします。
ここで何が間違っていますか?
scala - 内部クラスを充実させる
外側のクラスの任意のインスタンスで機能する内側のクラスに、enrich-my-library パターンを実装したいと考えています。このようなもの:
型が一致しないため、このコードはコンパイルされません: 型get
のオブジェクトを返しますOuter#Inner
が、test
期待していouter.Inner
ます。
それを機能させるには2つの方法がありますが、どちらもasInstanceOf
避けたい使用を伴います。get
最初のものは単に to の結果をキャストすることですouter.Inner
:
2 番目はもう少し一般的で、キャストを次のように行いExtInner
ます。
キャストを行う必要がないように、内部クラスを充実させるより良い方法はありますか?
scala - ライブラリ オブジェクトに新しいメソッドを追加するにはどうすればよいですか?
ライブラリ (具体的にはcom.twitter.finagle.mdns.MDNSResolver
) からクラスを取得しました。クラスを拡張したい (Try[Group] ではなく、Future[Set] を返すようにしたい)。
もちろん、サブクラス化してそこにメソッドを追加できることはわかっています。しかし、私は Scala を学びながら学んでおり、これは何か新しいことに挑戦する機会のように思えます。
これが可能であると私が考える理由は、の動作ですJavaConverters
。次のコード:
asScala
Java の にはメソッドがないため、コンパイルされませんArrayList
。しかし、いくつかの新しい定義をインポートすると:
それから突然方法がありasScala
ます。ArrayList
クラスが透過的に拡張されているように見えます。
の動作をJavaConverters
正しく理解していますか? その方法論を複製できますか (また複製する必要がありますか)?
scala - 拡張メソッドを含めるように scaladoc を構成する
暗黙的な変換を指定することで、暗黙的な変換からのメソッドを含めるように scaladoc を構成できますか?
例)
bar
のドキュメントにscaladoc に拡張メソッドを含めることはできますFoo
か?
scala - 型の不一致; 見つかった: Int(1) 必要: B
List
サイズを比較するためのより合理的な方法を提供するためにクラスを拡張しようとしていますが、タイトルのエラーに遭遇します...
これが私のコードです:
アイデアは、リストのサイズを比較するだけなので、それらのタイプが異なる可能性があり、問題にならないということでしたが、これを実行しようとすると:
前述のエラーが発生します。B を削除that
してタイプに設定すると正常にList[A]
動作しますが、2 つの異なるタイプを含むリストを使用することはできません...
A と B の両方が同じ型になれないのはなぜですか? または、何か不足していますか?
編集:わかりました、エラーの解決策を見つけました。これはかなり単純です:
しかし、私の質問はまだ残っています。なぜ私はそれを他の方法で行うことができないのですか?