namespace MS.Microservice.Core.Functional
{
///
/// 表示"无意义返回值"的类型,用于函数式编程中替代 void。
///
///
///
/// 在函数式编程中,函数应当是纯粹的映射:每一个输入都对应唯一的输出。
/// 但 C# 中的 void 方法不返回任何值,导致无法将它们当作一等函数(first-class function)
/// 传递给 或 等委托。
///
///
/// Unit 解决了这一问题:它是一个只有一个实例的类型,
/// 任何"无意义"的返回值都可以用 表示。
/// 将 Action 包装为返回 的 Func,
/// 即可在函数式管道(pipeline)中统一处理。
///
///
/// 来源:《C# 函数式编程》第 3.1 节 — 使用 Unit 表示无意义的值。
///
///
public readonly struct Unit : IEquatable
{
///
/// 的唯一实例。
/// 等同于 default(Unit)。
///
public static readonly Unit Default = default;
///
public bool Equals(Unit other) => true;
///
public override bool Equals(object? obj) => obj is Unit;
///
public override int GetHashCode() => 0;
///
/// 返回函数式编程中惯用的 Unit 字符串表示 "()"。
///
public override string ToString() => "()";
/// 两个 值永远相等。
public static bool operator ==(Unit left, Unit right) => true;
/// 两个 值永远不会“不相等”。
public static bool operator !=(Unit left, Unit right) => false;
}
}