dynamic - 我可以在 F# 中使用动态类型吗?

标签 dynamic f# c#-4.0 ironpython

.net4.0

我的测试.py

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

我可以在 C# 4 中使用它,如下所示:
        ScriptRuntime runtime = Python.CreateRuntime();
        dynamic script = runtime.UseFile("mytest.py");

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

但是,我如何在 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)

最佳答案

有一个模块FSharp.Interop.Dynamic ,在使用 dlr 实现动态运算符的 nuget 上。以便:

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)

与那里的许多片段相比,它有几个优点。
  • 它使用的性能Dynamitey用于 dlr 调用,Dynamitey 实现调用站点的缓存,是一个 PCL 库
  • 处理返回 void 的方法,如果在设置活页夹时没有丢弃那些结果,则会得到一个绑定(bind)异常。
  • dlr 自动处理函数调用委托(delegate)返回的情况,即兴 fsharp 也将允许您对 FSharpFunc
  • 执行相同操作
  • 添加一个!?前缀运算符来处理在运行时直接调用您没有类型的动态对象和函数。

    它是开源的,Apache许可证,你可以看看implementation它包括单元测试example cases .
  • 关于dynamic - 我可以在 F# 中使用动态类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3521489/

    相关文章:

    在函数中创建动态数组(calloc),并在 main 中使用它

    wpf - 动态添加行/列到网格

    .net - C#在依赖于继承类初始化的基类上执行代码

    c# - C# 中的引用程序集使用什么 .NET 版本?

    types - F#:组织类型和模块的最佳实践

    asp.net-mvc - .Net 4内存缓存类和用户 session

    iphone - 一个 UIButton 上有多个图像

    css - 标题中的三个div,一个左,一个动态,一个右

    dependency-injection - F# Unity 设计时配置

    function - 在 f# 中定义函数