alr*_*lrz 6 f# functional-programming function list
如何在F#中编写一个函数,用于将值列表Apply应用于mathematica中的(@@)符号函数(将列表的元素映射到函数参数)
例如apply f [1;2;3]调用f(1,2,3)或在curried函数应用程序中f 1 2 3
您可以编写一个函数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"
Run Code Online (Sandbox Code Playgroud)
示例使用如下所示:
let add a b = a + b;;
apply add [| 3;4 |];;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |