Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, _NN_, Вы писали:
_NN>>Что думаете ?
VD>Думаю, что это извращение. Есть ФВП и приведение типов.
А если нужно именно через объект без лямбды.
Что плохого в этой фиче ?
VD>А это даже не реализация перегрузки скобок, а какой-то хак.
А как должна выглядеть перегрузка скобок ?
По сути все что начинается с '@' является операцией, а значит должно быть public static.
Ну и соответственно нужно туда передавать объект первым аргументом, как в методах расширения.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, _NN_, Вы писали:
_NN>>Что думаете ? H>Жесть
А конкретнее ?
Хочется понять, чем эта возможность кому-то помешает.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, _NN_, Вы писали:
VD>>>Думаю, что это извращение. Есть ФВП и приведение типов. _NN>>А если нужно именно через объект без лямбды.
VD>Скорее всего кто-то в очередной раз занимается велосипедостроением
Возможно %)
VD>Давай для начала рассмотрим решаемую задачу.
Перегрузка () позволяет написать следующий код без макросов и без лишних использований (using):
// Фреймворк
[Record]
class XInt
{
public X : int { get; }
public F() : void {}
}
[Record]
class XString
{
public X : string { get; }
public G() : void {}
}
class XObject
{
public static @()(_ : XObject, x : int) : XInt { XInt(x); }
public static @()(_ : XObject, x : string) : XString { XString(x); }
public X() : void {}
}
def xobject = XObject();
// Использование
xobject.X();
xobject(1).F();
xobject("").G();
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, _NN_, Вы писали:
_NN>>Перегрузка () позволяет написать следующий код без макросов и без лишних использований (using):
VD>А индексаторы почему не подходят?
С таким же успехом можно просто использовать два объекта.
Хочется использовать именно скобки, тем более когда это технически реализуемо.
Здравствуйте, _NN_, Вы писали:
_NN>С таким же успехом можно просто использовать два объекта.
С каким "с таим же"? Неявный индексатор позволяет реализовать то что ты хочешь, но без изменения языка. Кроме того он для твоего примера подходит намного лучше.
_NN>Хочется использовать именно скобки, тем более когда это технически реализуемо.
Какая разница какие скобки ты будешь использовать (круглые или квадратные)?
Не уж то ради круглых скобок нужно усложнять и уродовать язык?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, _NN_, Вы писали:
_NN>>С таким же успехом можно просто использовать два объекта.
VD>С каким "с таим же"? Неявный индексатор позволяет реализовать то что ты хочешь, но без изменения языка. Кроме того он для твоего примера подходит намного лучше.
Нужны круглые скобки для того, чтобы код был максимально похож на код в JS.
Это может быть большим плюсом в выборе NemerleWeb.
Кому не нужно, тот просто может не использовать эту возможность, точно так же как и любую другую возможность языка.
Здравствуйте, _NN_, Вы писали:
_NN>Нужны круглые скобки для того, чтобы код был максимально похож на код в JS. _NN>Это может быть большим плюсом в выборе NemerleWeb.
Ничего что Немерл совсем не похож на JS?
_NN>Кому не нужно, тот просто может не использовать эту возможность, точно так же как и любую другую возможность языка.
К сожалению, это не так. Ты же не макрос предлагаешь сделать? Ты хочешь изменить язык и изменить вывод типов.
Вывод типов и так не быстрый. Твои доработки замедлят его еще больше.
Ну, а для твоей задачи достаточно сделать макрос который и будет создавать нужные типы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ничего что Немерл совсем не похож на JS?
Ничего
VD>К сожалению, это не так. Ты же не макрос предлагаешь сделать? Ты хочешь изменить язык и изменить вывод типов.
Изменить не так сильно.
VD>Вывод типов и так не быстрый. Твои доработки замедлят его еще больше.
Замедлятся только когда имеем код вида x() и 'x' типизировался до простого типа X.
Могу замерить на скорости сборки компилятора.
Это будет достаточно ?
VD>Ну, а для твоей задачи достаточно сделать макрос который и будет создавать нужные типы.
Макрос уже есть, который генерирует типы.
И в этих типах хочется иметь перегрузку ().
Здравствуйте, catbert, Вы писали:
C>Здравствуйте, _NN_, Вы писали:
_NN>>И в этих типах хочется иметь перегрузку ().
C>А что, если эти типы будут производными от Nemerle.Builtins.Function? Компилятор скушает?
Да.