foo
にはFStream
というクラスが含まれています。 foo
というパッケージオブジェクトは、FStream
のエクステンダメソッドを提供するいくつかの暗黙の値クラスを定義します。私はこれらの値クラスをパッケージオブジェクトから個々のファイルに移動したいと思いますが、FStream
(または、好ましくは、foo
パッケージから何かを使用するときは、いつでも使用できるようにしたいと思います。これは暗黙の値クラスを他のオブジェクトに入れようとしましたが、オブジェクトからは拡張できませんでした。クラスや特性に入れようとしましたが、暗黙の値クラスは他のオブジェクトでのみ定義できます。Scala - 暗黙的な値クラスを別のスコープで利用できるようにする
foo/FStream.scala
package foo
class FStream {
def makeFoo(): Unit = ???
}
のfoo/package.scala
package foo
package object foo {
// I want to move these definitions into separate files:
implicit class SuperFoo(val stream: FStream) extends AnyVal {
def makeSuperFoo(): Unit = ???
}
implicit class HyperFoo(val stream: FStream) extends AnyVal {
def makeHyperFoo(): Unit = ???
}
}
バー/ usage.scala
package bar
import foo._ // something nice and short that doesn't reference individual value classes
val x: FStream = ???
x.makeSuperFoo() // should work
x.makeHyperFoo() // should work
これが正しい応答ですが、私はアドバイスとそうは思いません暗黙のうちに使用しないことについて。 インプリシットは、「ゼロコスト」(完全ではない)の構文エンリッチメントとTypeclassパターンを可能にする、非常に強力なスカラー機能です。 –
私は正しい応答についてはわかりませんが、Herrington Darkholmeは間違いなく正しい名前です。私はまた、ヒューゴ・ファースと一緒に行くだろう。私は矛盾している。 –
かなり、それは私の提案ではなく、scalaコンパイラのものです。コンパイル時に '-feature'引数を追加すると、コンパイラは暗黙的な使用について警告します。暗黙的な問題を解決するには、上記のチュートリアルを参照してください。 –