Expression objet
Présentation
Expression permettant d'implémenter à la volée un type abstrait
💡 Similaire à une classe anonyme en Java
let makeResource (resourceName: string) =
printfn $"create {resourceName}"
{ new System.IDisposable with
member _.Dispose() =
printfn $"dispose {resourceName}" }
☝ La signature de makeResource
est string -> System.IDisposable
.
Implémenter 2 interfaces
Possible mais 2e interface non consommable facilement et sûrement
let makeDelimiter (delim1: string, delim2: string, value: string) =
{ new System.IFormattable with
member _.ToString(format: string, _: System.IFormatProvider) =
if format = "D" then
delim1 + value + delim2
else
value
interface System.IComparable with
member _.CompareTo(_) = -1 }
let o = makeDelimiter("<", ">", "abc")
// val o : System.IFormattable
let s = o.ToString("D", System.Globalization.CultureInfo.CurrentCulture)
// val s : string = "<abc>"
let i = (d :?> System.IComparable).CompareTo("cde") // ❗ Dangereux
// val i : int = -1
Mis à jour
Ce contenu vous a-t-il été utile ?