Я пишу какую-то библиотеку сериализации (для обучения F #). А теперь я застрял с этим:Общая функция в F #
Предположит, что у нас уже есть сериализации функция для некоторых основных типов:
type StoreOps =
static member inline store(x:int) = ...
static member inline store(x:int64) = ...
static member inline store(x:float) = ...
static member inline store(x:float32) = ...
static member inline store(x:bool) = ...
static member inline store(x:string) = ...
....
Теперь я хочу, чтобы реализовать функцию универсальной для хранения любого массива основных типов:
let inline store(x:'T[]) =
x |> Array.iter StoreOps.store
, но компилятор не может скомпилировать его (сообщение об ошибке говорит: A unique overload for method 'store' could not be determined based on type information prior to this program point
).
Каков правильный способ реализации таких функций в F #? Потому что я не хочу, чтобы скопировать-вставить N равные функции для int[]
, bool[]
, float[]
...
Спасибо за идею Единственным недостатком является то, у нас есть разные. имя функции для аналогичной задачи. – qehgt
Существует только одна функция 'storeArray'. Дублирование: вы всегда передаете 'StoreOps.store', когда вы вызываете функцию' storeArray'. – pad
Я имею в виду, что у нас есть 'StoreOps.store' для' float' и 'StoreOps.storeArray' для' float [] '. В идеальном мире должен быть только «StoreOps.store» – qehgt