Здравствуйте, VladD2, Вы писали:
VD>На самом деле это не так. "is" в Немерле — это паттерн, а не булево выражение. Но смысл, да, близкий.
хм... был уверен, что булево а почему оно не возвращает bool? мне видится код ниже нелогичным, есть какие-то причины?
def s = "";
def test1 = if (s is string) true else false; // test1 : booldef test2 = s is string; // test2 : string
VD>В данном случае это тоже не соввсем верно. ":" в паттерн-матчинге — это старый синтаксис для is. Его пометили как деприкейтед именно потому, что его действие шло в разрез со смыслом оператора ":" в языке. Так что впринципе upcast тоже будет работать:
эх... нужна внятная дока и спека по языку
Re[8]: [Lib] Принимаются пожелания по стандартной библиотеке
Здравствуйте, Ziaw, Вы писали:
Z>хм... был уверен, что булево а почему оно не возвращает bool? мне видится код ниже нелогичным, есть какие-то причины? Z>
Z>def s = "";
Z>def test1 = if (s is string) true else false; // test1 : bool
Z>def test2 = s is string; // test2 : string
Z>
Это уже использование аналогичного по имени макроса. Но этот макрос несколько сложнее нежели оператор шарпа. В нем допускается паттерн-матчинг. Например:
using System.Console;
def value : option[_] = Some(1);
WriteLine(value is Some(_)); // True
WriteLine(value is Some(1)); // True
WriteLine(value is Some(2)); // False
Более того оператор when тоже особым образом понимает этот оператор, так что можно писать даже так:
using System.Console;
def value : option[_] = Some(1);
when (value is Some(x))
WriteLine(x); // 1
Z>эх... нужна внятная дока и спека по языку
Сделаем. Можешь присоединяться, кстати . Язык Nemerle задумывался как книга-учебник-мануал. Я хочу сделать так... Дописать еще две части к ней. Одна будет посвящена ООП, а вторая макросам. Оставшаяся часть будет документацией в стиле QuickC (лучшей, на мой взгляд, образец документации). Она будет выстроена в форме: Фича -> краткое описание -> короткий пример.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: [Lib] Принимаются пожелания по стандартной библиотеке
Здравствуйте, Ziaw, Вы писали:
Z>Здравствуйте, VladD2, Вы писали:
VD>>На самом деле это не так. "is" в Немерле — это паттерн, а не булево выражение. Но смысл, да, близкий.
Z>хм... был уверен, что булево а почему оно не возвращает bool? мне видится код ниже нелогичным, есть какие-то причины? Z>
Z>def s = "";
Z>def test1 = if (s is string) true else false; // test1 : bool
Z>def test2 = s is string; // test2 : string
Z>
Почему второе строка? Оба выражения возвращают булеан. Просто в том виде что ты привел они вообще вряд ли работают, так как тип известен на этапе компиляции. А вот так:
def s : object = "";
def test1 = if (s is string) true else false; // test1 : booldef test2 = s is string;
WriteLine(test1.GetType());
WriteLine(test2.GetType());
должно работать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: [Lib] Принимаются пожелания по стандартной библиотеке
Здравствуйте, VladD2, Вы писали:
VD>Почему второе строка? Оба выражения возвращают булеан. Просто в том виде что ты привел они вообще вряд ли работают, так как тип известен на этапе компиляции. А вот так: VD>
VD>def s : object = "";
VD>def test1 = if (s is string) true else false; // test1 : bool
VD>def test2 = s is string;
VD>WriteLine(test1.GetType());
VD>WriteLine(test2.GetType());
VD>
VD>должно работать.
Да все ок, где-то я облажался в тесте, но я его уже убил .
Re[4]: [Lib] Принимаются пожелания по стандартной библиотеке
Здравствуйте, VladD2, Вы писали:
VD>Я ни разу не подлючал именно гугль-экаунты. У всех до этого были жмэйлы.
По-моему, это одно и то же.
VD>Если я правильно понял, твой экаунт это klapaucius.the.constructor? VD>Я его подключил в коммитеры. Попробуй. Если я ошибся, сообщи мне об этом и напиши точное имя экаунта.
Все в порядке. По крайней мере, я теперь числюсь коммитером.
VD>Ну, так может поднажмешь?
Да, но вообще мне нужно на многих фронтах поднажать, помимо этого.
VD>Или возьмешь кого-то в помощники?
А что, есть желающие мне помогать?
VD>Я очень хочу до конца года выолжить релиз-кандидат в который хочу включить и эту библиотеку. А то не будет реальных откликов.
Я, конечно, постараюсь, но ничего гарантировать не могу.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[2]: [Lib] Принимаются пожелания по стандартной библиотеке
Здравствуйте, VladD2, Вы писали:
VD>Поглядел исходники. В них используется пространство имен System.Linq и типы от туда (например, Enumerable). VD>Многие высказывались, что используют 2-ой фрэймворк для развертывания своих приложений. Так что стандартная бибилотека не должна быть основана на библиотеках из 3+ фрэймворков.
Это, конечно, плохо. Придется писать свой HashSet.
VD>Что такое SeqSeq в таблице API?
Там перечислены методы с окончанием Seq (т.е. не обобщенные версии, которые выбирают конкретную реализацию, а именно версии для IEnumerable. Многие из них я вообще сделаю private или internal) из модуля Seq.
Это автогенерируемая таблица для моего собственного удобства. главное — не нужно думать, что для окончания работы нужны плюсы во всех клетках. Надо будет, наверное, указать то, что планируется реализовать, а то такая таблица может постороннего наблюдателя дизориентировать.
VD>Может лучше переименовать MaxIndex в UpperBound?
Я думал об этом, это был первоначальный вариант, но тут из названия не ясно, верхняя граница включительно или не включительно, т.е. можно ли обращаться по индексу равному UpperBound. А в случае MaxIndex это очевидно. Поскольку весь смысл этого метода — возможность писать
i in [0 .. arr.MaxIndex()]
а не
i in [0 .. arr.Length-1]
я решил что MaxIndex лучше, хотя это вопрос дискуссионный, конечно.
VD>В добавок к методам XxxOrNone нужно бы добавить методы XxxOrDefault.
Да, для быстрых операций вроде Head это имеет смысл, там накладные расходы при использовании WithDefault вроде конструирования и деконструкции option будут заметны.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[3]: [Lib] Принимаются пожелания по стандартной библиотеке
Здравствуйте, Klapaucius, Вы писали:
K>Это, конечно, плохо. Придется писать свой HashSet.
Да, но его можно написать на базе хэш-таблицы. Я сейчас в компиляторе частенько ее использую вместо HashSet-а. А при переходе на 4-й фрэймворк можно подставить базовым классом стандартный HashSet.
VD>>Может лучше переименовать MaxIndex в UpperBound?
K>Я думал об этом, это был первоначальный вариант, но тут из названия не ясно, верхняя граница включительно или не включительно, т.е. можно ли обращаться по индексу равному UpperBound. А в случае MaxIndex это очевидно.
Может я конечно очень давно живу, но как-то еще со времен Васика привык что Bound — это граница. А для длинны обычно Length используется.
VD>>В добавок к методам XxxOrNone нужно бы добавить методы XxxOrDefault.
K>Да, для быстрых операций вроде Head это имеет смысл, там накладные расходы при использовании WithDefault вроде конструирования и деконструкции option будут заметны.
Это для всех методов полезно будет. Во-первых, иногда приходится и скорость выжимать, а создание объектов (option[]) точно ее не добавляет. Во-вторых, частенько бывает так, что default() — это то что нужно в качестве стартового значения. Например, для целых "0" почти всегда хорошо подходит. Получается меньше писанины.
ЗЫ
В ближайшее время хотим выложить релиз-кандитат. Было бы здорово если бы ты к этому времени таки перенес библиотеку в Nemerle.dll.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.