Каков правильный синтаксис для использования tryremove и byref в F # - PullRequest
0 голосов
/ 13 января 2020

У меня есть следующее:

let callbacks = ConcurrentDictionary<string, Object>()

Я пытаюсь использовать TryRemove:

if callbacks.TryRemove(id, myObject : byref<Object>) then ...

, который не компилируется; Я тоже пытался:

let mutable cc = Object
if callbacks.TryRemove(id, ref cc) then ...

но то же самое .. и это:

let mutable cc = Object
if callbacks.TryRemove(id, &cc) then ...

Каков правильный синтаксис для использования этого?

1 Ответ

5 голосов
/ 13 января 2020

Компилятор переписывает здесь функцию с возвращаемым типом, таким как TryRemove: string -> (bool, obj), поэтому вы можете взаимодействовать с ним, используя совпадение:

match d.TryRemove "blah" with
| true, o -> //do something with o
| false, _ -> // in this case o is the default value of Object, so is useless

, если вы не хотите совпадать, вы можете использовать let :

let found, v = d.TryRemove "blah"

, хотя этот путь опасен, если вы забудете проверить значение found перед использованием v, поэтому я рекомендую совпадение. Он удерживает область действия o настолько узкой, насколько это возможно.

...