c# – 用功能组合推断泛型类型
假设我想实现一个功能组合,如下所示:
public Func<T,T> Compose<T>(Func<T,T> f,Func<T,T> g) { return new Func<T,T>( x => f(g(x))); } 现在在实践中,我可以像这样使用这个Compose()fn: public String ToUpper(String s) { return s.ToUpper(); } public String Replicate(String s) { return s+s; } public void Run() { var h = Compose<String>(ToUpper,Replicate); System.Console.WriteLine("{0}",h("fred")); } 结果是FREDFRED. 有没有办法使用更简单的语法来调用Compose?我试过这样的: var h = Compose(ToUpper,Replicate); …但是我收到编译错误:
很容易理解.我想知道是否有可能以不同方式声明它并得到推断实际工作. 编辑 有趣 – 他没有提到Javascript或C#,我认为它们是主流语言,两者都具有相当不错的功能. (我不知道F#.) 我觉得很奇怪这是去年 – 14个月前的讲座 – 然而他似乎并不知道主流现代语言的功能方面. 所以我跟着做练习,但不是使用scheme或lisp,而是使用C#.并且还在Javascript中执行其中一些操作. 无论如何,感谢大家对质量的反应. 解决方法
以下代码可以工作:
Func<string,string> toUpper = ToUpper; Func<string,string> replicate = Replicate; // now the compiler knows that the parameters are Func<string,string> var h = Compose(toUpper,replicate); 所以也许你仍然可以通过仅定义这些变量一次来获得你正在寻求的可读性改进,并且他们在整个测试中重复使用它们(我假设这是一个测试实用程序…) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |