2022-05-14 17:25:18 +08:00
|
|
|
|
using Sanchime.Functional.Products;
|
|
|
|
|
using Sanchime.Functional.Extensions;
|
2022-05-08 14:57:11 +08:00
|
|
|
|
using Sanchime.Toolkits;
|
|
|
|
|
|
|
|
|
|
|
2023-01-09 21:12:00 +08:00
|
|
|
|
|
2023-01-15 21:50:01 +08:00
|
|
|
|
// try
|
|
|
|
|
// {
|
|
|
|
|
// void foo(Option<int> option)
|
|
|
|
|
// {
|
|
|
|
|
// var res = option.Map(x => x + 2);
|
|
|
|
|
// res.WriteLine();
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// "预计打印Some(12)".WriteLine();
|
|
|
|
|
// foo(10);
|
|
|
|
|
// "预计打印None".WriteLine();
|
|
|
|
|
// foo(Optional.None);
|
|
|
|
|
//
|
|
|
|
|
// "预计打印None".WriteLine();
|
|
|
|
|
// Optional.Some(Optional.None).WriteLine();
|
|
|
|
|
//
|
|
|
|
|
// "预计打印Some(String)".WriteLine();
|
|
|
|
|
// Optional.Some(1)
|
|
|
|
|
// .Map(x => x + 1.2)
|
|
|
|
|
// .Map(x => x.ToString())
|
|
|
|
|
// .Map(x => x.GetType().Name)
|
|
|
|
|
// .WriteLine();
|
|
|
|
|
//
|
|
|
|
|
// // 测试Option的Bind
|
|
|
|
|
// var parse = (string s) => Int32.TryParse(s, out int i) ? Optional.Some(i) : Optional.None;
|
|
|
|
|
// var foo1 = (string s) => s.Pipe(parse).Bind(Age.Of);
|
|
|
|
|
// "预计打印Some(111)".WriteLine();
|
|
|
|
|
// foo1("111").WriteLine();
|
|
|
|
|
// "预计打印None".WriteLine();
|
|
|
|
|
// foo1("aaa").WriteLine();
|
|
|
|
|
// "预计打印Some(123)".WriteLine();
|
|
|
|
|
// foo1("123").WriteLine();
|
|
|
|
|
// // 管道
|
|
|
|
|
// "预计打印None".WriteLine();
|
|
|
|
|
// foo1("1ab").Pipe(x => x.WriteLine());
|
|
|
|
|
// }
|
|
|
|
|
// catch (Exception ex)
|
|
|
|
|
// {
|
|
|
|
|
// ex.Message.WriteLine();
|
|
|
|
|
// ex.StackTrace.WriteLine();
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// public struct Age
|
|
|
|
|
// {
|
|
|
|
|
// private int _value;
|
|
|
|
|
//
|
|
|
|
|
// public static Option<Age> Of(int age)
|
|
|
|
|
// => IsValid(age) ? Optional.Some(new Age(age)) : Optional.None;
|
|
|
|
|
//
|
|
|
|
|
// private Age(int age)
|
|
|
|
|
// {
|
|
|
|
|
// if (!IsValid(age))
|
|
|
|
|
// {
|
|
|
|
|
// throw new ArgumentException("输入的年龄是无效的");
|
|
|
|
|
// }
|
|
|
|
|
// _value = age;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// private static bool IsValid(int age)
|
|
|
|
|
// => age is (>= 0 and <= 150);
|
|
|
|
|
//
|
|
|
|
|
// public override string ToString()
|
|
|
|
|
// => _value.ToString();
|
|
|
|
|
// }
|