本文介绍了从函数中提取函数名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我怎样才能创建一个名为getFuncName函数,该函数类型的函数(单位 - >'一),并返回其名称
我是说的一个。 C#的开发者,他们说,你可以使用一个函数功能型物业。方法中所示的示例 。
我试图将其转换为F#:
例如转换(单位 - >'一)一键入Func键< _>然后调用它的属性,但它总是返回字符串调用
让getFuncName F = $。 b $ b让fFunc = System.Func< _>(FUN _ - > F())
fFunc.Method.Name
让customFunc()= 1.0
//返回调用,但我希望它回归customFunc
getFuncName customFunc
背景对该问题的一个位为:
我创建的类型的函数的数组(单位 - > Deedle.Frame)。我现在想通过这些功能调用循环他们和保存它们具有相同的名称作为函数的CSV名称为CSV。一些假设性的代码如下:
让发电机:(单位 - >框架< INT,串>)数组= ...
发电机
|> Array.iter(乐趣发电机 - 方式>发生器()SaveCsv(sprintf的%s\%s.csv__SOURCE_DIRECTORY__(getFuncName发生器)))
这是一个脚本感,而不是应用程序代码中使用。
解决方案
不知道你是如何搜索信息,但是搜索引擎的第一个查询给了我这样的响应:
让getFuncName F =
型让利'= f.GetType()
让方法'= type'.GetMethods()|> Array.find(乐趣米 - > m.Name =调用)。
让IL = method'.GetMethodBody()GetILAsByteArray()
让methodCodes = [字节OpCodes.Call .value的;字节OpCodes.Callvirt.Value]
让位置= IL |> Array.findIndex(好玩点¯x - > methodCodes |> List.exists((=)X))
让metadataToken = BitConverter.ToInt32(IL,位置+ 1)
让actualMethod = type'.Module.ResolveMethod metadataToken
actualMethod.Name
Taken from here
Although there may be a more simple way.
这篇关于从函数中提取函数名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!