2010-08-19 11 views
8

.net4.0¿Puedo usar tipos dinámicos en F #?

mytest.py

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

lo puedo usar en C# 4, de esta manera:

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

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

Pero, ¿cómo puedo usar dinámico en C#?

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) 

Respuesta

3

hay un módulo FSharp.Interop.Dynamic, en Nuget que implementa el operador dinámico utilizando el DLR. Así que:

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) 

Tiene varias ventajas sobre muchos de los fragmentos que hay.

  • rendimiento que utiliza Dynamitey para la llamada DLR y Dynamitey implementa el almacenamiento en caché de los callsites y es una biblioteca PCL
  • trata los métodos que devuelven vacío, se obtendría una excepción de enlace si no descartó resultados de aquellos cuando la carpeta fue configurada.
  • el DLR maneja el caso de llamar a un retorno delegado por una función automática, FSharp improvisada también le permitirá hacer lo mismo con un FSharpFunc
  • añade una!? operador de prefijo para gestionar la invocación directa de objetos dinámicos y funciones que no tienen el tipo en tiempo de ejecución.

    Es de código abierto, licencia de Apache, puede consultar implementation e incluye la prueba de unidad example cases.

Cuestiones relacionadas