Re[9]: [Nemerle] The null coalescing operator
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.10.06 13:57
Оценка:
Здравствуйте, IT, Вы писали:

IT>Нифига он не понятен. Ставил эксперименты над несколькими людьми. Ни один человек сходу интуитивно не понял. Ни один!


А ты им сказал что он должен делать? Я вот прочтя строчку описания и поглядев пример сразу понял о чем идет речь.

VD>>и не создает странного побочного эффекта.


IT>Как насчёт: '::=', '&=', '|=' и даже '='? Они тоже создают странные побочные эффекты?


Отлично. Эти операторы принимают и возвращают значение одного и того же пипа, а ?? разного.

Так что как насчет :=, :>= и прочего бред?

IT>Да ради бога, я и не настаиваю.


Ну, и отлично, так как я категорически против этого извращения.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: [Nemerle] The null coalescing operator
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.10.06 13:57
Оценка:
Здравствуйте, IT, Вы писали:

IT, операторы с побочными эффектаи это просто уму невоброзимо. Ненадо гробить язык и портить код проектов.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: [Nemerle] The null coalescing operator
От: VladD2 Российская Империя www.nemerle.org
Дата: 03.10.06 13:57
Оценка:
Здравствуйте, 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>Я бы разобрался, но тоже не могу понять как правильно то надо? \


Я тебе уеж говорил. Забей на всесь булшит что ты начитался в стандарте и сделай тупо:
<[ mattch ($value1) { Some| (x) => x | None() => $defValue } ]>


ie>Не зависимо от того является ли второй операнд option, возвращать Value? — А что тогда делать если оба None?


Просто рассчитывать на то что второй аргумент не можут быть option[]. Я даже представить не могу разумного использования такой ситуации. Если кому-то надо возвратить option[] пусть использует паттерн-матчинг.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: [Nemerle] The null coalescing operator
От: ie Россия http://ziez.blogspot.com/
Дата: 03.10.06 16:12
Оценка:
Здравствуйте, VladD2, Вы писали:

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.

VD>Ситуация не надоуманная, а бредовая.

Спасибо, сам боялся себе признаться, что я брежу.

VD>Да и преимер не определен.


Надо выполнить некоторые действия для всех параметров, при этом результатом должно быть первое не null значение.

VD>Что за тип у res?


Разве не очевидно? 'int?'

VD>Что касается оперовтов =??, ??=. Я гляжу у вас ребяты от избытка возможностей крушу рвет. Возмите себя в руки. Новшества не должны создавать проблем. Они должны решать имеющиеся. "Крутость" ни в коем случае не долнжна становиться аспектом выбора.


Ты смайлик видел?

VD>>>С Some() у тебя точно ерунда выходит, так как из него точно никаких неявных приведений типов нет. Так что это по любому ошибка.

ie>>Дык, из nullable тоже нет никаких неявных приведений.
VD>Как же нет если 'int?' по твоим же словам приводится к 'int' ?

По каким словам?
Неявно можно привести 'int' к 'int?', но не наоборот. Наоборот, только используя явное привидение.

VD>Я тебе уеж говорил. Забей на всесь булшит что ты начитался в стандарте и сделай тупо:

VD>
VD><[ mattch ($value1) { Some| (x) => x | None() => $defValue } ]>
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'
... << RSDN@Home 1.2.0 alpha rev. 655>>
Превратим окружающую нас среду в воскресенье.
Re[10]: [Nemerle] The null coalescing operator
От: IT Россия linq2db.com
Дата: 03.10.06 17:23
Оценка:
Здравствуйте, VladD2, Вы писали:

IT>>Нифига он не понятен. Ставил эксперименты над несколькими людьми. Ни один человек сходу интуитивно не понял. Ни один!


VD>А ты им сказал что он должен делать?


Зачем? Всё же интуитивно понятно

VD>>>и не создает странного побочного эффекта.

IT>>Как насчёт: '::=', '&=', '|=' и даже '='? Они тоже создают странные побочные эффекты?
VD>Отлично. Эти операторы принимают и возвращают значение одного и того же пипа, а ?? разного.

Кто сказал разного? Я такого не говорил. Впрочем вот это:

int? n = 0;
n &= 1;

работает без проблем.

VD>Так что как насчет :=, :>= и прочего бред?


К чему это всё? Боюсь, ты опять что-то недопонял и решил додумать по своему.

IT>>Да ради бога, я и не настаиваю.


VD>Ну, и отлично, так как я категорически против этого извращения.


Почему же ты не против извращения '??' ?
Если нам не помогут, то мы тоже никого не пощадим.
Re[12]: [Nemerle] The null coalescing operator
От: IT Россия linq2db.com
Дата: 03.10.06 17:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>IT, операторы с побочными эффектаи это просто уму невоброзимо. Ненадо гробить язык и портить код проектов.


Какие ещё побочные эффекты? Ты мне можешь объяснить что ты там сам себе нафантазировал?
Если нам не помогут, то мы тоже никого не пощадим.
Re[12]: [Nemerle] The null coalescing operator
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.06 00:06
Оценка:
Здравствуйте, ie, Вы писали:

ie>Если ты второй аргумент не option, то работать будет так, как ты и хочешь, не используй с option в качестве второго аргумента и будет тебе счастье.


ie>
ie>def x = Some (1);
ie>def y = Some (2);
ie>def z = x ?? y ?? 3; // у 'z' будет тип 'int'
ie>


Что-то я не вижу как твой код
Автор: ie
Дата: 29.09.06
это обеспечит.
Ты тесты делал?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: [Nemerle] The null coalescing operator
От: ie Россия http://ziez.blogspot.com/
Дата: 04.10.06 03:42
Оценка:
Здравствуйте, VladD2, Вы писали:

ie>>Если ты второй аргумент не option, то работать будет так, как ты и хочешь, не используй с option в качестве второго аргумента и будет тебе счастье.


ie>>
ie>>def x = Some (1);
ie>>def y = Some (2);
ie>>def z = x ?? y ?? 3; // у 'z' будет тип 'int'
ie>>


VD>Что-то я не вижу как твой код
Автор: ie
Дата: 29.09.06
это обеспечит.


x ?? y ?? 3 == x ?? (y ?? 3)

y — option[int], 3 — int, (option[int] ?? int) — int => (y ?? 3) — int
x — option[int] => x ?? (y ?? 3) — int => x ?? y ?? 3 — int

VD>Ты тесты делал?


Естественно, вот эти тесты отрабатываю на ура:

assert (on ?? o1 ?? o2 ?? 3 == 1);
assert (GetExprType(on ?? o1 ?? o2 ?? 3).Equals (typeof (int)));
WriteLine($"$(on ?? o1 ?? o2 ?? 3)");

assert (on ?? on ?? on ?? 3 == 3);
assert (GetExprType(on ?? on ?? on ?? 3).Equals (typeof (int)));
WriteLine($"$(on ?? on ?? on ?? 3)");
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[14]: [Nemerle] The null coalescing operator
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.06 13:56
Оценка:
Здравствуйте, ie, Вы писали:

VD>>Ты тесты делал?


ie>Естественно, вот эти тесты отрабатываю на ура:


ie>
ie>assert (on ?? o1 ?? o2 ?? 3 == 1);
ie>assert (GetExprType(on ?? o1 ?? o2 ?? 3).Equals (typeof (int)));
ie>WriteLine($"$(on ?? o1 ?? o2 ?? 3)");

ie>assert (on ?? on ?? on ?? 3 == 3);
ie>assert (GetExprType(on ?? on ?? on ?? 3).Equals (typeof (int)));
ie>WriteLine($"$(on ?? on ?? on ?? 3)");
ie>


Это не то что нужно. Нужно:
def a : option[int] = None();
def b : int = a ?? 2;
assert((a ?? 2).GetType().FullName == "System.Int32");
assert(a ?? 2 == 2);

def a : option[int] = Some(1);
def b : int = a ?? 2;
assert((a ?? 2).GetType().FullName == "System.Int32");
assert(a ?? 2 == 1);


PS

И логики работы с option[] я все равно не понял.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: [Nemerle] The null coalescing operator
От: ie Россия http://ziez.blogspot.com/
Дата: 04.10.06 14:35
Оценка:
Здравствуйте, 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[] я все равно не понял.

Ну все же вроде просто, 2 правила:

option['t] ?? 't -> 't
option['t] ?? option['t] -> option['t]

... << RSDN@Home 1.2.0 alpha rev. 655>>
Превратим окружающую нас среду в воскресенье.
Re[16]: [Nemerle] The null coalescing operator
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.10.06 22:03
Оценка:
Здравствуйте, ie, Вы писали:

ie>Ну да, это и так есть

ie>Кстати, несколько дней назад я закомитил оператор в svn, можешь свои догадки относительно работы легко проверить.

ОК, так и сделаю. Но чуть позже.
ie>Ну все же вроде просто, 2 правила:

ie>

ie>option['t] ?? 't -> 't
ie>option['t] ?? option['t] -> option['t]


Вот первого я что-то и не вижу. Возможно плохо смотрел. Но...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.