【发布时间】:2020-02-24 12:50:04
【问题描述】:
在 c# dll 中,我有一个方法,它采用 func 参数:
public static AttrDiffRule Create<T>(string a_attr, string b_attr, Func<IAttrProxy,IAttrProxy,T,bool> parametricRule, T ruleParam, string desc = null)
以及一些预定义的默认方法:
public static bool NumberEqualsWithTolerance(IAttrProxy a, IAttrProxy b, double tolerance)
现在在 C# 中使用它时,我可以编写以下代码并且它可以工作:
var tmp = DefaultRules.Create("fds", "fds", DefaultRules.NumberEqualsWithTolerance, 10.0);
但是,在 F# 中:
let attrRule = DefaultRules.Create("fd","fdsa", DefaultRules.NumberEqualsWithTolerance, 89.)
给出语法错误:“错误 FS0002 此函数接受太多参数,或在不期望函数的上下文中使用”
将 C# 静态方法传递给期望 F# 中的 Func 的参数的正确方法是什么?
重要的是实际传入函数,而不是 lambda 包装器,因为 Create 方法的工作是使用参数函数的 MethodInfo,它被 lambda 包装器隐藏。
传入的函数没有重载,也尝试过在适当的位置指定类型
(DefaultRules.NumberEqualsWithTolerance : Func<IAttrProxy,IAttrProxy,float,bool>)
【问题讨论】:
标签: f#