В F # Как я могу привести функцию к другому делегату? - PullRequest
0 голосов
/ 07 июля 2011

Мне нужно привести функцию с подписью Thing -> Thing -> int к Comparison<Thing>.

Например, когда у меня есть:

Array.Sort(values, mySort)

Я получаю сообщение об ошибке " Ожидается, что это выражение будет иметь тип сравнения, но здесь имеет тип Thing -> Thing -> int "

Когда я пытаюсь это сделать:

Array.Sort(values, (fun (a, b) -> mySort a b))

(на самом деле это с помощью объекта-оболочки)

Я получаю сообщение об ошибке " Несоответствие ограничений типа. Тип '' a -> 'b" несовместим с типом "Сравнение""

Как я должен предоставить Comparison<T>?

К вашему сведению: Comparison<T> является делегатом с подписью 'T * 'T -> int

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

Это работает для меня:

let values = [|1;2;3|]
let mySort a b = 0
Array.Sort(values, mySort)

Но вы пробовали:

Array.Sort(values, Comparison(mySort))
0 голосов
/ 07 июля 2011

Как ни странно, несмотря на тот факт, что подписи делегатов выражаются в кортежной форме (например, 'T * 'T -> int), вам необходимо предоставить свою функцию в каррированном виде (например, fun a b -> mySort a b). См. раздел 6.4.2 спецификации.

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