Έχουν δημοσιευτεί
Σάββατο, 10 Απριλίου 2010 12:56 μμ
από το μέλος
PALLADIN
Με αφορμή αυτό το
thread, και επειδή ο ξεχασμένος Scheme hacker που κρύβω μέσα μου επαναστάτησε...
σκέφτηκα να συνδυάσω old time classic Scheme hacking και modern C# style API.
public static class PatternMatch
{
public static Func<Func<TValue, TResult>, Func<TValue, TResult>> With<TValue, TResult>(Func<TValue, bool> condition, Func<TValue, TResult> action)
{
return With(value => value, condition, action);
}
public static Func<Func<TValue, TResult>, Func<TValue, TResult>> With<TValue, TResult>(this Func<Func<TValue, TResult>, Func<TValue, TResult>> withFunc, Func<TValue, bool> condition, Func<TValue, TResult> action)
{
return continuation => withFunc(value => condition(value) ? action(value) : continuation(value));
}
public static Func<TValue, TResult> Else<TValue, TResult>(this Func<Func<TValue, TResult>, Func<TValue, TResult>> withFunc, Func<TValue, TResult> elseFunc)
{
return withFunc(elseFunc);
}
}
Example:
var pattern = PatternMatch.With<int, string>(value => value == 1, value => "One ")
.With(value => value == 2, value => "Two ")
.With(value => value == 3, value => "Three ")
.Else(_ => "Else");
Console.WriteLine(pattern(1));
Καλό Σάββατο σε όλους μας.