F # -> Общий тип - множественный, не структура - PullRequest
1 голос
/ 22 апреля 2011

Моей первой мыслью было:

type ManyNavigationPropertyInfo<'a,'b>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =

однако оно разрешает 'a и 'b как obj, но это должны быть классы - поэтому я и сделал:

type ManyNavigationPropertyInfo <'a когда' a: не структура, 'b когда' b: не структура> (cfg: ManyNavigationPropertyConfiguration <'a,' b>) =

, но это просто выдает ошибкупоговорка

Неожиданный символ ',' в имени типа.Ожидаемый '>' или другой токен.

Как правильно объявить такой тип?

ОБНОВЛЕНИЕ:

Мой полный кодэто:

type ManyNavigationPropertyInfo<'a,'b>(cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =
    member x.WithMany (expr: Expr<'a -> ICollection<'b>>) = 
        cfg.WithMany(ToLinq(expr))

и возникает 2 ошибки компилятора, говорящие, что 'a и 'b должны быть not struct.

1 Ответ

4 голосов
/ 22 апреля 2011

Ваша первая мысль верна. Вы должны быть в состоянии просто написать:

type ManyNavigationPropertyInfo<'a,'b>
       (cfg:ManyNavigationPropertyConfiguration<'a, 'b>) =
   // ...

Проблема, вероятно, где-то позже в теле типа. Исходя из того, что вы написали в теле, компилятор считает, что 'a и 'b должны иметь тип obj (например, вы передаете значения этого типа где-то, где ожидается obj, или, возможно, что-то более тонкое ).

Вы можете попробовать добавить аннотации типов в теле класса - это обычно помогает найти проблему, потому что сообщение об ошибке изменяется, когда вы аннотируете бит, который компилятор F # интерпретирует иначе, чем вы ожидали.

Чтобы решить непосредственную проблему в вашем вопросе - синтаксис для указания ограничения немного отличается (сначала запишите все переменные типа, а затем ограничения):

type ManyNavigationPropertyInfo<'a, 'b when 'a : not struct and 'b : not struct>( ... )

(Но если вы можете разместить большую часть кода, возможно, кто-то может дать конкретный совет.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...