公平的警告,我是函数编程的新手,所以我可能有很多错误的假设。
我一直在学习代数类型。许多功能语言似乎都有它们,它们在与模式匹配一起使用时非常有用。但是,他们实际上解决了什么问题?我可以像这样在C#中实现一个看似(排序)的代数类型:
public abstract class Option { }
public class None : Option { }
public class Some<T> : Option
{
public T Value { get; set; }
}
var result = GetSomeValue();
if(result is None)
{
}
else
{
}
但是我认为大多数人都同意这是面向对象编程的混蛋,您永远都不要这样做。那么函数式编程是否只是添加了一种更简洁的语法,从而使这种编程风格看起来不太那么粗拙?我还想念什么?
class ThirdOption : Option{}
,给你new ThirdOption()
,你预期Some
或None
?
data Maybe a = Just a | Nothing
(相当于data Option a = Some a | None
您的示例):您不能在事后添加第三种情况。虽然可以按照显示的方式对C#中的求和类型进行仿真,但这并不是最漂亮的。