Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.185.194] |
|
Страницы: (6) « Первая ... 4 5 [6] все ( Перейти к последнему сообщению ) |
Сообщ.
#76
,
|
|
|
Цитата korvin @ А оператор ; переопределить нельзя? Я вроде уже спрашивал этот вопрос, может, не у тебя, но на этом форуме. Оператора ";" увы не существует. По крайней мере в существующих языках программирования. https://en.wikipedia.org/wiki/Operator_%28c..._programming%29 Общепринятое определение оператора: Цитата an operator is an object that is capable of manipulating a value |
Сообщ.
#77
,
|
|
|
Цитата korvin @ А вот чистому Си не повредили бы, чтобы проверки кодов ошибок синтаксически лучше выглядели б. Ты имеешь в виду что-то вроде монады Either? Или ты вообще вне контекста обсуждения монад? Добавлено Цитата Oleg2004 @ Цитата korvin @ А оператор ; переопределить нельзя? Я вроде уже спрашивал этот вопрос, может, не у тебя, но на этом форуме. Оператора ";" увы не существует. По крайней мере в существующих языках программирования. https://en.wikipedia.org/wiki/Operator_%28c..._programming%29 Общепринятое определение оператора: Цитата an operator is an object that is capable of manipulating a value Ну вот монады позволяют как бы пеегружать ; Не в C++ |
Сообщ.
#78
,
|
|
|
Цитата D_KEY @ Ну вот монады позволяют как бы пеегружать ; Скорее всего тогда он не соответствует определению оператора. Могу согласиться, что разделитель(delimiter) может быть в любом языке определен как что угодно. Попробуйте перегрузить пробел " ". Это однопозиционный разделитель, который в современных языках не есть оператор ни в коем случае... Не хватает семантики для существующих на клавиатуре одноклавишных символов - выдумываем двупозиционные, трех и т.д. В Javascript не шли путем перегрузки, а тупо вводили 3-х, 4-х и 5-ти позиционные. Мне такой подход виден более очевидным. |
Сообщ.
#79
,
|
|
|
Можно и так сказать, но всё-таки этот макрос недостаточно гибкий и вообще выглядит костылём для
if (error) { return error; } Чуть получше выглядят функции map/map_or/map_or_else/ для Option, но получается многословно. do-нотацию на макросах пытались делать, но выглядит тоже страшненько, кроме самых простых случаев: let l = mdo! { z =<< 1i32..11; x =<< 1..z; y =<< x..z; when x * x + y * y == z * z; ret ret((x, y, z)) }.collect::<Vec<_>>(); |
Сообщ.
#80
,
|
|
|
Цитата DarkEld3r @ но выглядит тоже страшненько Да вроде не так и страшно. Особенно на фоне синтаксиса rust |
Сообщ.
#81
,
|
|
|
Цитата D_KEY @ Ты имеешь в виду что-то вроде монады Either? Да, типа того. Конечно, есть ещё куча нюансов. Добавлено Цитата Oleg2004 @ Скорее всего тогда он не соответствует определению оператора. Почему? Наоборот же, обычный оператор типа (Monad m => forall a b. m a -> (a -> m b) -> m b). Или я тебя не так понял? |
Сообщ.
#82
,
|
|
|
Цитата korvin @ Цитата D_KEY @ Ты имеешь в виду что-то вроде монады Either? Да, типа того. Конечно, есть ещё куча нюансов. Ну можно сделать для C++, примерно как я показал. Только синтаксически ты сам видел, какой отстой. А do-нотацию не сделать. |
Сообщ.
#83
,
|
|
|
Ага Этот то ли смайк то ли ещё кто многим активным участникам политики "подарки" сделал Довольно однообразные, кстати. |
Сообщ.
#84
,
|
|
|
Ну я на 100% не уверен, что это смайк.
|
Сообщ.
#85
,
|
|
|
Цитата korvin @ Наоборот же, обычный оператор типа (Monad m => forall a b. m a -> (a -> m b) -> m b). Или я тебя не так понял? Операторов типа не существует как класса. Так же как не существуют операторы DECLARE, IF, FOR, CASE и прочая. |