静的に利用できる(特性によって縮小されている)関数を持つクラスが必要です。次に、タイプパラメータとしてそのような型を取り、縮小された静的関数にアクセスする型パラメータ化メソッドが必要です。 (静的という用語はScalaではなく、私が何を意味するのかを知っています)コンパイラ型のスカラ型制約
私がScalaで静的関数を持つことを知っている唯一の方法は、コンパニオンオブジェクトに特性を拡張させることです。しかしそれには2つの問題があります:
- コンパイルオブジェクトがいくつかの特性を拡張するようにタイプパラメータを制約する方法はわかりません。
- クラスが実際にコンパニオンオブジェクトと異なるタイプの静的メソッドにどのようにアクセスするのか分かりません。
これは完全にオフにすることが、ちょっと私は何をしたいです可能性があります
MyTrait {
def MyFunction() : Any //some function
}
case class MyClass(i: Int)
object MyClass extends MyTrait {
def MyFunction() = {/*do stuff*/}
}
//need the type as a class not an object because I need it for a higher order function like this
def SomeFunctionHigherOrderFunction[T /*constrain T such that the companion object of T <: MyTrait*/](someFunc : Function1[T, Any]) : Unit {
val someStuff = T.MyFunction()
/*use someStuff in here*/
}
SomeFunctionHigherOrderFunction[T](/*provide a Function1[T, Any]*/);
正解か、この問題について行くのいくつかのより良い方法の任意のアイデア?
ありがとうございます!
を経由してそれを使用するあなたが持っている:この
それとも、そのオブジェクトで何かを持っていない場合、あなたもちょうどインラインそれを行うことができますような何かあなたのコードのいくつかのタイプミス。 [あなたが私たちに与えた例をコンパイルできることを確認してください!](http://sscce.org/) –