Ограничить класс чертой и структурным подтипом в Scala - PullRequest
4 голосов
/ 08 декабря 2011

Мне нужно ограничить параметр метода Scala, чтобы он реализовывал как черту, так и структурный подтип.Как я могу это сделать?

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

Что мне поставить вместо xxx?Я пробовал и extends, и with, но получил синтаксические ошибки.

Можно ли это сделать, используя определение type для структурного подтипа?

Ответы [ 2 ]

7 голосов
/ 08 декабря 2011

Да, вы можете использовать type для этого:

type CanBeClosed = {def close()}

def someMethod[A <: Foo with CanBeClosed](resource: A)(block: A => Unit) {
  // ...
}

Недавно я также написал пост на похожую тему:

http://hacking -scala.posterous.com / сочиняя-ваши-типа-на лету

6 голосов
/ 08 декабря 2011

Я на самом деле не уверен, если это то же самое, что предложил Тенши, но он компилируется, так что попробуйте ...

def someMethod[A <: Foo { def close() }](resource: A)(block: A => Unit) {
  // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...