2010-08-19 4 views
8

.net4.0Posso usare i tipi dinamici in F #?

mytest.py

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

posso usarlo in C# 4, in questo modo:

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

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

Ma, come posso usare dinamica in F #?

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) 

risposta

3

V'è un modulo FSharp.Interop.Dynamic, su NuGet che implementa l'operatore dinamico utilizzando il dlr. So That:

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) 

Ha diversi vantaggi su molti frammenti là fuori.

  • prestazioni utilizza Dynamitey per la chiamata e la DLR Dynamitey implementa il caching dei callsites ed è una libreria PCL
  • Maniglie metodi che restituiscono vuoto, si otterrebbe un'eccezione vincolante se non scartare i risultati di quelli quando il raccoglitore è stato impostato. gestisce
  • Il DLR il caso di chiamare automaticamente un ritorno delegato da una funzione, FSharp improvvisato permetterà anche di fare lo stesso con un FSharpFunc
  • aggiunge un!? operatore prefisso per gestire invocando direttamente oggetti dinamici e funzioni che non hanno il tipo in fase di esecuzione.

    È open source, licenza Apache, è possibile guardare il implementation e include test di unità example cases.