F # уникальный метод перегрузки - PullRequest
0 голосов
/ 08 ноября 2010

Как я могу вызвать send (a: 'T []) такого типа?

type Test() =
  member o.send(value:'T) = 4
  member o.send(values:'T []) = 5

let test = Test()
let b = test.send [|4|]

Когда я это делаю, я получаю

A unique overload for method 'Send' could not be determined based on type information 
prior to this program point. The available overloads are shown below...

Дело в том, что MPI.NET имеет именно этот метод, называемый Send, и я не могу отправить в него массив.

Спасибо,
Олдрич

Ответы [ 3 ]

2 голосов
/ 08 ноября 2010
type Test() =
  member o.send(a:'T) = 4
  member o.send(a:'T []) = 5

let test = Test()
let b = test.send<int>([|4|] : _[]) // 5
2 голосов
/ 08 ноября 2010

Что ж, F # не может определить, является ли ваш T целым числом или массивом целых чисел, поэтому я могу видеть, как можно обойти вашу проблему следующим образом:

let b = test.send<int> [|4|]

или это

let b = test.send<int array> [|4|]
0 голосов
/ 08 ноября 2010

Вы можете сделать это, используя сопоставление с образцом для типов:

type MyTest() =
    member this.Send (a : obj)  = 
        match a with
        | :? System.Collections.IEnumerable -> 5
        | _ -> 4

Это будет соответствовать любому типу Seq в F # (массив, список, последовательность). Если у вас есть подходящее совпадение, обычно проще реализовать частные функции для определенного типа.

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