Здравствуйте, vdimas, Вы писали:
Тебе не надоело позориться? Опять же бред написал.
V>Ну, для ссылочных типов такую же семантику умудрились сделать без накручивания вложенностей определений.
V>Просто есть специальное значение, приводимое (сравнимое) с произвольным типом — null.
Это аналог Optional<T>.
У Optional<Optional<T>>
ДВА различных null'а. У Optional<Optional<Optional<T>>> три.
V>Для алг. типов данных — тоже. Правда, эти типы данных всегда обрабатываются как ссылочные, даже если не ссылочные. ))
Бред.
V>Если string — это ссылочный тип, то Option<string> не имеет смысла, можно пользоваться сразу string.
Не во всех языках есть null. Ибо null зло.
V>Это всё рассуждения в пользу бедных, потому что прикладная семантика может быть обслужена сугубо прикладными же полями, а не "системными". И даже должна, потому что булевских флагов, связанных со значениям, может быть более одного.
Опять чистейший бред.
WH>>то без этой фичи код не будет знать есть элемент или в таблице лежит None.
V>А в общем случае достаточно интерпретировать null как "нет значения".
Не достаточно.
class Hashtable<Tkey, TValue>
{
public Option<TValue> Get(TKey key)
{
...
}
}
class CachedFactory<Tkey, TValue>
{
private Hashtable<Tkey, TValue> _cache = new Hashtable<Tkey, TValue>();
private Tkey -> TValue _factory;
public CachedFactory(Tkey -> TValue factory)
{
_factory = factory;
}
public TValue Get(TKey key)
{
if (_cache.Get(key) is Some(value))
return value;
else
{
var value = _factory(key);
_cache.Add(key, value);
return value;
}
}
}
Если сюда засунуть тяжёлую функцию (а CachedFactory именно для таких функций и нужно) которая возвращает Option<что-что> то в твоём варианте алгоритм не сможет определить была вызвана функция или нет.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>