Scalaでジェネリック演算子を定義することは可能ですか?
Scalaを使用すると、関数に任意の演算子をマップできます。これは非常に便利です。ただし、アプリケーションの状態に応じて演算子を変更したい場合は、制限があるようです。
例を挙げると、ユーザーのテーブルとそれぞれの関係のテーブルがあります。それぞれの関係には、「friends-with」、「works-with」などのタイプがあります。私のドメインモデルに基づいて、DSLで次のことを許可したいと思いますis(john friends-with mary)
。この場合、john
とmary
は両方ともObjectUser
であり、汎用演算子がありdef <relationship> (a:User): Boolean = {...}
ます。
私が達成したかったのは、まさにDynamicが私にできることでした(答えを参照)。説明は完全に一致します:
動的な呼び出しを可能にするマーカー特性。このトレイトのインスタンスxでは、任意のメソッド名methおよび引数リストargsに対してx.meth(args)を呼び出すことができます。呼び出しがxでネイティブにサポートされていない場合は、x.applyDynamic( "meth"、args)に書き換えられます。
詳細はこちら:http ://www.scala-lang.org/api/current/scala/Dynamic.html