私の場合、dom4j要素では、Scala XML ElemオブジェクトとXML要素の別の表現を暗黙的に変換したいと思います。私は以下の暗黙的な変換を書いた:Scalaコレクション型間の暗黙の変換
implicit def elemToElement(e: Elem): Element = ... do conversion here ...
implicit def elementToElem(e: Element): Elem = ... do conversion here ...
これまでのところ、これはうまくいきます。
また、両方の方法を変換するために、上記の要素のコレクションも必要です。まず、追加の変換方法を書く必要がありますか?私がしなければ、うまくいかないようでした。
私は次のように記述してみました:
implicit def elemTToElementT(t: Traversable[Elem]) = t map (elemToElement(_))
implicit def elementTToElemT(t: Traversable[Element]) = t map (elementToElem(_))
変換方法はTraversableのを取る場合、それはまた、Traversableのを返すので、これはあまりにも理想的では見えません。リストに合格すれば、Traversableも出ます。だから私は変換が何らかの形でパラメータ化されるべきだと考えています。
できるだけ一般的にするためにこれらのコンバージョンを作成する標準的な方法は何ですか?
なぜ 'X'から' Y'に 'List [X]'から 'List [Y]'に自動的に変換できないのでしょうか?これはまったく同じ必要性を満たします。つまり、どの表現が使用されているのか、コンパイラがあなたのために忙しい作業を処理することを実際に気にしないことです。 –
これは主にスタイルとベストプラクティスの問題です。多くの魔法が問題を求めていることを暗黙のうちに尋ねる。彼らは、私の見解では、スカラーのBFGの1つです:あなたが指しているものに注意してください。 – sblundy
私はRexと同意する:私はそれが紛らわしいことに同意しない。逆に、与えられた型の暗黙の変換を定義すると、自動的にその型のコンテナ(暗黙的に "モナド"という)のコンテナも変換されることを期待していました。 – ebruchez