1
20
我对生管不感兴趣,但我试着把所有的参考资料都写进了可能的单子:
然后假设您有一个对象模型,允许您按名称查找一个记录公司,然后查找该记录公司内的一个带区,该带区的一个成员,并且其中任何一个都可能返回空值,因此这可能引发空引用异常:
我们可以解决这个问题:
嘿,presto,如果这些转换中的任何一个返回空值,pixiesdrummer将为空。 如果我们可以做一些扩展方法作为运算符重载,这不是很好吗?
然后我可以像这样把我的过渡羔羊放在一起:
同样,如果System.Void被定义为一种类型,而action实际上只是func<…,void>,这不是很好吗? 更新: I blogged a little about the theory behind this . 更新2: 原始问题的另一个答案大致是“您将如何用C表示f pipe forward操作符?” 管道前进是:
换句话说,它允许您以相反的顺序编写一个函数及其第一个参数:参数后跟函数。它只是一个帮助阅读的语法助手,允许您在任何函数中使用中缀符号。 这正是C中的扩展方法。如果没有它们,我们将不得不写:
有了它们,我们可以写:
(忽略了它们也让我们省略类名的事实——这是一个奖励,但也可以用于非扩展方法,就像它在Java中一样)。 所以C已经以不同的方式解决了相同的问题。 |
2
3
所以对于管道,我认为不需要检查空值,也不需要调用管道函数。在许多情况下,函数参数很容易接受一个空值,并由函数处理。
这是我的实现。我有
假货币的好处在于,在提供参数之后,您可以输入方法名,从而比使用lambda生成的嵌套更少。
join在最后一个位置上有IEnumerable,所以可以这样做。
下面是我的示例实现:
|
3
1
虽然不完全一样,但你可能对我的
Push LINQ
框架。基本上在哪里
MarcGravell和我已经实现了大多数标准的Linq查询操作符,这意味着您可以针对数据源编写查询表达式,并做一些有趣的事情,比如流分组、多个聚合等。 |
4
1
你的Pipe方法看起来非常像画眉组合器。 My implementation 其中很简单。
|
Thomas · 使类型别名在F中不可互换# 2 年前 |
sdgfsdh · 我该怎么说。使用异步转换函数进行收集? 6 年前 |
Soldalma · 我可以实例化包含顶级副作用值的类吗? 6 年前 |
matekus · F#-包含数字的字符串的自然排序 6 年前 |
matekus · F#类型匹配-无法创建映射或匹配记录 6 年前 |
Rob Lyndon · 未找到F#ProvidedTypes文件 6 年前 |
red-swan · 如何将intro ML.Net演示翻译为F#? 6 年前 |
jkone27 · F#-在编译时从字符串生成简单的空类型 6 年前 |