但是如何在C#中实现**运算符以用于F#项目?
如果我在C#中这样做:
public static Integer operator ^(Integer left,Integer right){ if (Integer.IsNaN(left) || Integer.IsNaN(right)) return NaN; return left.RaisetoPower(right);}
它编译得很好,我可以像”运算符一样使用它,但这些都不适用于F#:
let intgr3 = intgr1 ** intgr2let intgr3 = intgr1 ^ intgr2
在C#中,这不起作用:
public static Integer operator **(Integer left,Integer right){ if (Integer.IsNaN(left) || Integer.IsNaN(right)) return NaN; return left.RaisetoPower(right);}
那么如何在C#中定义**运算符的F#等价物呢?
谢谢.
所以,我创建了几个测试项目并使用你的定义^,这是我在F#中找到的:
open cslib // cslib is the C# librarylet ( ** ) (x : Integer) (y : Integer) = x.RaisetoPower ylet x = new Integer()let y = new Integer()let a = x ^ y // errorlet b = x ^^^ y // compiles,but looks like XORlet c = x ** y // compiles
您可以在F#中定义新的全局运算符,但是如果您希望这是一个可能不可接受的通用库.
您可以通过在C#库中的Integer类型中定义公共静态方法Pow来定义在F#中使用的Exponentiation运算符:
public static Integer Pow(Integer left,Integer right){ if (Integer.IsNaN(left) || Integer.IsNaN(right)) return NaN; return left.RaisetoPower(right);}
然后,您可以直接在F#中使用它作为**.我会注意到C#中的重载运算符不是惯用的,所以对于C#用户来说,使用Pow方法看起来很自然.
总结以上是内存溢出为你收集整理的在C#中定义F#’**’运算符全部内容,希望文章能够帮你解决在C#中定义F#’**’运算符所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)