2010-08-19 14 views
8

.net4.0Kann ich dynamische Typen in F # verwenden?

mytest.py

def Add (a, b): 
    return a+b 

Ich kann es in C# 4 verwenden, so:

  ScriptRuntime runtime = Python.CreateRuntime(); 
     dynamic script = runtime.UseFile("mytest.py"); 

     Console.WriteLine(script.Add(1, 3)); 

Aber wie kann ich dynamisch in F # verwenden?

open System 
open Microsoft.Scripting.Hosting 
open IronPython.Hosting 

let call a b= 
    let runtime = Python.CreateRuntime() 
    let script = runtime.UseFile("mytest.py") 
    script.Add(a,b) 

Antwort

3

Es ist ein Modul FSharp.Interop.Dynamic, auf NuGet, die den dynamischen Bediener unter Verwendung des DLR implementiert. Also das:

open System 
open Microsoft.Scripting.Hosting 
open IronPython.Hosting 
open EkonBenefits.FSharp.Dynamic 

let call a b= 
    let runtime = Python.CreateRuntime() 
    let script = runtime.UseFile("mytest.py") 
    script?Add(a,b) 

Es hat einige Vorteile gegenüber vielen der Snippets da draußen.

  • Leistung es Dynamitey für den dlr Aufruf verwendet und Dynamitey implementiert Caching des callsites und ist eine PCL Bibliothek
  • Methoden behandelt, die void zurückgeben, würden Sie eine verbindliche Ausnahme erhalten, wenn Sie nicht Ergebnisse verwerfen haben von diejenigen, als der Binder eingerichtet wurde.
  • Die dlr behandelt den Fall der durch eine Funktion eines Stellvertreters Rückkehr Aufruf ermöglicht es Ihnen, automatisch wird improvisierte FSharp auch gleich mit einem FSharpFunc
  • zu tun fügt ein!? Präfixoperator zum direkten Aufruf dynamischer Objekte und Funktionen, die zur Laufzeit nicht zur Verfügung stehen.

    Es ist Open-Source-, Apache-Lizenz, können Sie die implementation betrachten und es enthält Komponententest example cases.

Verwandte Themen