Por que uma função com byref não pode ser convertida diretamente para delegar?

Em circunstâncias normais, as funções F # podem ser convertidas em delegados chamandonew DelegateType e passando a função como argumento. Mas quando o delegado contémbyref parâmetro, isso não é possível diretamente. Por exemplo, o 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)

não será compilado, fornecendo o seguinte erro:

Este valor da função está sendo usado para construir um tipo de delegado cuja assinatura inclui um argumento byref. Você deve usar uma expressão lambda explícita com 1 argumento

Seguindo o erro, modificando o código para usar

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

trabalho. Mas minha pergunta é: por que isso é necessário? Por que o F # não permite a conversão da função nomeada para esse delegado, mas a conversão do lambda é bo

Eu me deparei com esse comportamento ao pesquisaroutra pergunt. Eu percebibyref destina-se apenas à compatibilidade com outros idiomas .Net.

questionAnswers(2)

yourAnswerToTheQuestion