2011-12-08 4 views
4

Scalaメソッドのパラメータを、特性と構造的サブタイプの両方を実装するように制限する必要があります。これどうやってするの?Scalaのクラスを特色と構造的サブタイプに限定する

trait Foo 
// ... 
def someMethod[A <: Foo xxx { def close() }](resource: A)(block: A => Unit) { 
    // ... 
} 

xxxの代わりに何を入力しますか?私はextendswithの両方を試しましたが、構文エラーがありました。

構造サブタイプの定義をtypeで行うことはできますか?

答えて

6

私は実際にはわからないんだけど、この場合テンシが提案したのと同じことですが、コンパイルするので、試してみてください。

def someMethod[A <: Foo { def close() }](resource: A)(block: A => Unit) { 
    // ... 
} 
+0

私はtenshiの解法を使うつもりです。なぜなら、 'A <:Foo with Bar with CanBeClosed'という複数の特性が許されているからです。答えに感謝します。私は1つの特性しか持たないときにこの構文を使うかもしれません。 – Ralph

+1

'[A <:Foo with Bar {def close()}]'信じているかどうか、これはうまくいく;) – agilesteel

関連する問題