Я использую сторонний API, который довольно неуклюже использует параметры ref для создания выходов. Лично я действительно ненавижу этот дизайн API, но это то, что у меня есть для меня прямо сейчас. Мне пришлось скрывать типы данных API немного из-за проприетарного кода, но это не должно иметь отношения к проблеме.F # передача null ссылка на параметр ref
Во всяком случае в C# я могу передать пустую ссылку в качестве параметра реф успешно следующим образом:
IDataType tl = null;
bool success = api.myFunction(ref tl);
Однако в F # следующий не будет работать
let mutable tl : IDataType = null //null reference assignment in F#
let success = api.myFunction(&tl) //& means ref in F#
возвращает ошибку пустого ссылка исключение , В C# такая ошибка не возвращается.
Неужели кто-нибудь испытывает это раньше? Я думаю, что это должно быть ошибкой в самом API, который является относительно древним дизайном.
** Редактировать: Это должно быть закрыто, я считаю, что ответ не лежит в коде F #, а в API, поскольку это уже ряд известных ошибок, подобных этому.
Вы проверили, не используется ли использование по умолчанию: 'let (success, tl) = api.myFunction()'? –
Извините, я не уверен, что вы имеете в виду, метод myFunction принимает параметр ref как входной сигнал и возвращает логическое значение, а не кортеж. –
Я думаю, что Gene означает, что F # вызывает параметры 'out', но здесь это' ref'. –