Imagesharp мутировать в F#

Я пытаюсь использовать ImageSharp для редактирования изображений в F#. Я изо всех сил пытаюсь заставить мутации изображения работать

Чтобы сделать мутацию изображения в C#, похоже, что вы просто используете метод mutate и лямбду:

image.Mutate(x => x.Kodachrome())

Обычно, чтобы изменить C# лямбды на F#, я бы просто использовал анонимные функции, например так:

image.Mutate(fun x -> x.Kodachrome())

Когда я это делаю, я получаю следующую ошибку:

Не найдены перегрузки для метода 'Mutate'. Доступные перегрузки показаны ниже (или в окне списка ошибок).

Похоже, что метод Mutate принимает ImageProcessor, но по какой-то причине в F# компилятор не может понять, что анонимная функция - это ImageProcessor. Как я могу заставить мутацию изображения работать в F#?

2 ответа

Решение

F# может автоматически конвертировать из анонимной функции (fun ...) к System.Action<_>, но только если типы точно совпадают. Здесь нет, потому что Kodachrome() не возвращается unit, Поэтому вам нужно игнорировать его возвращаемое значение:

image.Mutate(fun x -> x.Kodachrome() |> ignore)

Вам нужно будет явно преобразовать F# лямбду в Action:

image.Mutate <| Action<_> (fun x -> x.Kodachrome ())
Другие вопросы по тегам