Здравствуйте, IT, Вы писали:
IT>Нифига он не понятен. Ставил эксперименты над несколькими людьми. Ни один человек сходу интуитивно не понял. Ни один!
А ты им сказал что он должен делать? Я вот прочтя строчку описания и поглядев пример сразу понял о чем идет речь.
VD>>и не создает странного побочного эффекта.
IT>Как насчёт: '::=', '&=', '|=' и даже '='? Они тоже создают странные побочные эффекты?
Отлично. Эти операторы принимают и возвращают значение одного и того же пипа, а ?? разного.
Так что как насчет :=, :>= и прочего бред?
IT>Да ради бога, я и не настаиваю.
Ну, и отлично, так как я категорически против этого извращения.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, ie, Вы писали:
ie>Здравствуйте, VladD2, Вы писали:
ie>>>Смысл можно найти во всем, но то что такой случай редкость, спорить не буду.
VD>>Ну, так поясни мне его. А то я его не вижу в упор. Если речь идет не о nullable-типах, а о ссылочных, то это другое дело. Ты все равно это как частный случай обрабатываешь.
ie>Например такой:
ie>
ie>def GetValue(p) : int?
ie>{
ie> // возвращаем зависимое от p значение
ie>}
ie>...
ie>...
ie>foreach (i in $[1..20])
ie> res = res ?? GetValue(i); // мож сделать оператор '=??' в догонку к '??' и '??=' ? :)))
ie>
ie>Ситуация конечно надуманная, но я не исключаю возможности ее возникновения. Аналогично с option.
Ситуация не надоуманная, а бредовая. Да и преимер не определен. Что за тип у res?
Что касается оперовтов =??, ??=. Я гляжу у вас ребяты от избытка возможностей крушу рвет. Возмите себя в руки. Новшества не должны создавать проблем. Они должны решать имеющиеся. "Крутость" ни в коем случае не долнжна становиться аспектом выбора.
VD>>С Some() у тебя точно ерунда выходит, так как из него точно никаких неявных приведений типов нет. Так что это по любому ошибка.
ie>Дык, из nullable тоже нет никаких неявных приведений.
Как же нет если 'int?' по твоим же словам приводится к 'int' ?
VD>>Так что по крайней мере разберись с Some(x)/None().
ie>Я бы разобрался, но тоже не могу понять как правильно то надо? \
Я тебе уеж говорил. Забей на всесь булшит что ты начитался в стандарте и сделай тупо:
ie>Не зависимо от того является ли второй операнд option, возвращать Value? — А что тогда делать если оба None?
Просто рассчитывать на то что второй аргумент не можут быть option[]. Я даже представить не могу разумного использования такой ситуации. Если кому-то надо возвратить option[] пусть использует паттерн-матчинг.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
ie>>def GetValue(p) : int?
ie>>{
ie>> // возвращаем зависимое от p значение
ie>>}
ie>>...
ie>>...
ie>>foreach (i in $[1..20])
ie>> res = res ?? GetValue(i); // мож сделать оператор '=??' в догонку к '??' и '??=' ? :)))
ie>>
ie>>Ситуация конечно надуманная, но я не исключаю возможности ее возникновения. Аналогично с option. VD>Ситуация не надоуманная, а бредовая.
Спасибо, сам боялся себе признаться, что я брежу.
VD>Да и преимер не определен.
Надо выполнить некоторые действия для всех параметров, при этом результатом должно быть первое не null значение.
VD>Что за тип у res?
Разве не очевидно? 'int?'
VD>Что касается оперовтов =??, ??=. Я гляжу у вас ребяты от избытка возможностей крушу рвет. Возмите себя в руки. Новшества не должны создавать проблем. Они должны решать имеющиеся. "Крутость" ни в коем случае не долнжна становиться аспектом выбора.
Ты смайлик видел?
VD>>>С Some() у тебя точно ерунда выходит, так как из него точно никаких неявных приведений типов нет. Так что это по любому ошибка. ie>>Дык, из nullable тоже нет никаких неявных приведений. VD>Как же нет если 'int?' по твоим же словам приводится к 'int' ?
По каким словам? Неявно можно привести 'int' к 'int?', но не наоборот. Наоборот, только используя явное привидение.
VD>Я тебе уеж говорил. Забей на всесь булшит что ты начитался в стандарте и сделай тупо: VD>
Вот это точно ерунда. o1 ?? o2 — где тут $value1, а где тут $defValue? И вообще, куда ты дел o2?
ie>>Не зависимо от того является ли второй операнд option, возвращать Value? — А что тогда делать если оба None? VD>Просто рассчитывать на то что второй аргумент не можут быть option[]. Я даже представить не могу разумного использования такой ситуации. Если кому-то надо возвратить option[] пусть использует паттерн-матчинг.
Так из-за чего сыр-бор то???
Если ты второй аргумент не option, то работать будет так, как ты и хочешь, не используй с option в качестве второго аргумента и будет тебе счастье.
def x = Some (1);
def y = Some (2);
def z = x ?? y ?? 3; // у 'z' будет тип 'int'
Здравствуйте, VladD2, Вы писали:
IT>>Нифига он не понятен. Ставил эксперименты над несколькими людьми. Ни один человек сходу интуитивно не понял. Ни один!
VD>А ты им сказал что он должен делать?
Зачем? Всё же интуитивно понятно
VD>>>и не создает странного побочного эффекта. IT>>Как насчёт: '::=', '&=', '|=' и даже '='? Они тоже создают странные побочные эффекты? VD>Отлично. Эти операторы принимают и возвращают значение одного и того же пипа, а ?? разного.
Кто сказал разного? Я такого не говорил. Впрочем вот это:
int? n = 0;
n &= 1;
работает без проблем.
VD>Так что как насчет :=, :>= и прочего бред?
К чему это всё? Боюсь, ты опять что-то недопонял и решил додумать по своему.
IT>>Да ради бога, я и не настаиваю.
VD>Ну, и отлично, так как я категорически против этого извращения.
Почему же ты не против извращения '??' ?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, ie, Вы писали:
ie>Если ты второй аргумент не option, то работать будет так, как ты и хочешь, не используй с option в качестве второго аргумента и будет тебе счастье.
ie>
ie>def x = Some (1);
ie>def y = Some (2);
ie>def z = x ?? y ?? 3; // у 'z' будет тип 'int'
ie>
Здравствуйте, VladD2, Вы писали:
ie>>Если ты второй аргумент не option, то работать будет так, как ты и хочешь, не используй с option в качестве второго аргумента и будет тебе счастье.
ie>>
ie>>def x = Some (1);
ie>>def y = Some (2);
ie>>def z = x ?? y ?? 3; // у 'z' будет тип 'int'
ie>>
Здравствуйте, VladD2, Вы писали:
VD>Это не то что нужно. Нужно: VD>
VD>def a : option[int] = None();
VD>def b : int = a ?? 2;
VD>assert((a ?? 2).GetType().FullName == "System.Int32");
VD>assert(a ?? 2 == 2);
VD>def a : option[int] = Some(1);
VD>def b : int = a ?? 2;
VD>assert((a ?? 2).GetType().FullName == "System.Int32");
VD>assert(a ?? 2 == 1);
VD>
Ну да, это и так есть
Кстати, несколько дней назад я закомитил оператор в svn, можешь свои догадки относительно работы легко проверить.
VD>PS VD>И логики работы с option[] я все равно не понял.
Здравствуйте, ie, Вы писали:
ie>Ну да, это и так есть ie>Кстати, несколько дней назад я закомитил оператор в svn, можешь свои догадки относительно работы легко проверить.
ОК, так и сделаю. Но чуть позже. ie>Ну все же вроде просто, 2 правила:
ie>