В е # проекта У меня есть следующие типы:F # Тип Constraint Несовпадение при использовании ограничения на функции общего
type A = { Name: string }
type B = { Name: string; SurName: string }
type C = { Name: string; SurName: string; MaidenName: string }
и следующую функцию, используя ограничение на общий аргумент:
let inline filterByName<'a when 'a: (member Name: string)> (name: string) (collection: 'a seq) =
collection |> Seq.where(fun i -> i.Name = name)
проблема я получаю следующую ошибку компиляции времени:
Type constraint mismatch. The type
'a
is not compatible with type
C
The type ''a' does not match the type 'C'
Удаление inline
из определения функции дает мне компиляции ошибки времени:
This code is not sufficiently generic. the type variable ^a when ^a:(member get_Name: ^a -> string) could not be generalized because it would escape its scope.
То, что я пытаюсь достичь иметь функцию, которая принимает обобщенный тип со свойством конкретного имени, «Name» в этом случае. Что я делаю неправильно или что мне не хватает?
удивительный, спасибо чувак –