将列表应用于函数的参数

 i1L3i1L4 发布于 2023-02-13 21:45
  • php
  • 如何在F#中编写一个函数,用于将值列表Apply应用于mathematica中的(@@)符号函数(将列表的元素映射到函数参数)

    例如apply f [1;2;3]调用f(1,2,3)或在curried函数应用程序中f 1 2 3

    1 个回答
    • 您可以编写一个函数apply来获取任何F#函数和一个参数数组,并通过Reflection调用该函数.

      但是,有一个很好的理由为什么它不在标准的F#库中 - F#的优势之一(例如与Mathematica相比)是它是静态类型语言并且可以在编译时捕获大多数潜在错误.如果您使用类似的东西,apply您将失去此检查[因为您永远不知道列表是否具有正确的长度].

      不过,这是一个如何执行此操作的示例:

      open Microsoft.FSharp.Reflection
      
      let apply (f:obj) (args:obj[]) =
        if FSharpType.IsFunction(f.GetType()) then
          let invoke =
            f.GetType().GetMethods()
            |> Seq.find (fun mi -> mi.Name = "Invoke" && mi.GetParameters().Length = args.Length)
          invoke.Invoke(f, args)
        else failwith "Not a function"
      

      示例使用如下所示:

      let add a b = a + b;;
      apply add [| 3;4 |];;
      

      2023-02-13 21:55 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有