¿Por qué no se puede convertir una función con byref directamente en delegado?

En circunstancias normales, las funciones de F # se pueden convertir en delegados llamando anew DelegateType y pasando la función como argumento. Pero cuando el delegado contienebyref parámetro, esto no es posible directamente. Por ejemplo el código:

type ActionByRef<'a> = delegate of 'a byref -> unit

let f (x:double byref) = 
    x <- 6.0

let x = ref 42.0
let d = new ActionByRef<_>(f)

no compilará, dando el siguiente error:

Este valor de función se está utilizando para construir un tipo de delegado cuya firma incluye un argumento byref. Debe usar una expresión lambda explícita que tome 1 argumentos.

Siguiendo el error, modificando el código para usar

let d = new ActionByRef<_>(fun x -> f(&x))

trabajos. Pero mi pregunta es: ¿por qué es esto necesario? ¿Por qué F # no permite la conversión de la función nombrada a este delegado, pero la conversión de lambda está bien?

e encontré con este comportamiento al investigarotra pregunt. Me doy cuenta debyref es solo para compatibilidad con otros lenguajes .Net.

Respuestas a la pregunta(2)

Su respuesta a la pregunta