Existe-t-il un moyen d'accéder à des objets DLR (par exemple, instance de sous-classe DynamicObject) (propriétés et méthodes) dans F # qui est similaire à C# dynamic?Accès objet dynamique F #
Répondre
Il y a un module maintenant NuGet qui utilise le dlr pour mettre en œuvre l'opérateur dynamique. Il a plusieurs avantages par rapport à un grand nombre de snippets disponibles sur le marché.
- Performance utilise Dynamitey pour l'appel dlr qui met en œuvre la mise en cache et est une bibliothèque PCL
- méthodes poignées qui reviennent vides, vous aurez une exception si la liaison ne vous défaussez pas de ceux-ci.
- Le dlr gère le cas d'appel d'un retour délégué par une fonction automatiquement, cela vous permettra également de faire la même chose avec un FSharpFunc
Ajoute un!? préfixe opérateur pour gérer l'appel direct des objets dynamiques et des fonctions dont vous n'avez pas le type au moment de l'exécution.
Il est open source, licence Apache, vous pouvez regarder le implementation et le test unitaire de base example cases.
Oui, c'est. Vous pouvez utiliser l'opérateur ?
dans F #, et il fonctionnera de la même manière en typage dynamique en C# et VB.NET en .NET 4.0. Pour commencer, vous pouvez lire cet échantillon dynamique SQLDataReader du blog de Tomas Petricek:
http://tomasp.net/blog/dynamic-sql.aspx
Voici une citation de son article:
Dans cet article, nous allons voir comment utiliser l'opérateur dynamique pour rendre l'expérience d'utiliser ADO.NET de F # nettement mieux. Opérateur dynamique (il y en a en fait deux) un moyen simple de prendre en charge dynamique invoquer en F #. Nous pouvons l'utiliser pour écrire code qui ressemble presque à un appel de méthode ordinaire ou la propriété accès, mais est résolue dynamiquement au runtime (en utilisant le nom de la méthode ou propriété). L'exemple suivant montre ce que nous serons en mesure d'écrire à la fin de cet article:
// Call 'GetProducts' procedure with 'CategoryID' set to 1 use conn = new DynamicSqlConnection(connectionString) use cmd = conn?GetProducts cmd?CategoryID <- 1 conn.Open() // Read all products and print their names use reader = cmd.ExecuteReader() while reader.Read() do printfn "Product: %s" reader?ProductName
Si vous avez déjà essayé d'appeler une procédure stockée SQL directement en utilisant le SqlCommand, vous pouvez certainement apprécier l'élégance de ce code extrait. Jetons maintenant un coup d'oeil un exemple plus grand et quelques-uns des trucs soignées qui rendent cela possible ...
Et pour plus d'informations, vous pouvez lire le reste de son article. Heureux codage dynamique en F # :)
Comme eriawan mentionné, l'opérateur ?
se comporte un peu comme le type dynamic
en C#. L'article sur l'appel de SQL ne repose sur rien du DLR, car vous pouvez fournir votre propre implémentation de l'opérateur ?
et le compilateur l'utilise directement.
J'ai également écrit un bref exemple de la façon d'utiliser l'opérateur ?
pour appeler des membres en utilisant DLR, qui est available on F# snippets et il y en a un plus sophisticated version by Matthew Podwysocki. Un autre extrait montre comment l'utiliser pour appeler la norme .NET types using Reflection.
Voir aussi:
- 1. Programmation dynamique en F #
- 2. F # option dynamique
- 3. Accès dynamique aux cellules
- 4. F # Matching objet mutable (string)
- 5. F # accès synchronisé à la liste
- 6. Accès dynamique à la propriété dynamique
- 7. F # opérateur de recherche dynamique surcharge
- 8. Accès variable objet
- 9. Accès jQuery Objet JSON
- 10. Accès Objet parent PHP
- 11. Accès JSON objet
- 12. objet JSON accès
- 13. Accès Valeur objet JSON
- 14. Accès dynamique aux résultats d'action
- 15. La différence entre object [] = object [] f = nouvel objet [] et var f = new []?
- 16. décalage horaire Django avec un objet F
- 17. F # équivalent du C# « objet » mot-clé
- 18. F # WPF - l'affichage d'un objet simple Viewport3D
- 19. Définir une propriété sur l'objet dynamique ViewBag en F #
- 20. objet dynamique jQuery sélecteur
- 21. Ajout dynamique d'un objet?
- 22. dynamique, objet, Var
- 23. Objet Dynamique Non Activé
- 24. XML sérialiser objet dynamique
- 25. StringTemplate objet dynamique .net
- 26. Objet REST à objet .net semi-dynamique
- 27. Javascript: accès à un objet
- 28. Accès SalesForce objet personnalisé Problème
- 29. Accès au fichier objet GNU
- 30. objet Accès statique autre exemple
tnx. étrange comment Google n'est pas venu avec ce lien sur F # dlr/dynamique de distribution: \ mon google-fu suce –
Vous êtes les bienvenus. vous avez raison, il n'apparaît pas dans la requête google. –
En fait? dans F # n'est pas la même chose que dynamique dans C# et l'exemple de procédure stockée de Tomas n'utilise pas le DLR. Voir la réponse de Tomas et l'autre question liée. –