Mixins являются хорошей функцией. В основном mixins позволяют Вам иметь конкретный код для интерфейса вместо класса. Затем просто реализуйте интерфейс в наборе классов, и Вы автоматически получаете смешивание функциональности. Например, для смешивания в глубоком копировании в несколько классов определите интерфейс
internal interface IPrototype<T> { }
, Добавляет функциональность для этого интерфейса
internal static class Prototype
{
public static T DeepCopy<T>(this IPrototype<T> target)
{
T copy;
using (var stream = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(stream, (T)target);
stream.Seek(0, SeekOrigin.Begin);
copy = (T) formatter.Deserialize(stream);
stream.Close();
}
return copy;
}
}
Тогда интерфейс реализации в любом типе для получения смешивания.
Этот код отлично работает, используйте: - разделите «Ваша строка» [] и замените ',' любым разделителем
split [] t = [t]
split (a:l) t = if a==',' then (t:split l []) else split l (t++[a])
splitBy del str = helper del str []
where
helper _ [] acc = let acc0 = reverse acc in [acc0]
helper del (x:xs) acc
| x==del = let acc0 = reverse acc in acc0 : helper del xs []
| otherwise = let acc0 = x : acc in helper del xs acc0