Седелал так что теперь, если у лямбды или функции параметр имеет имя "_" и его тип является void (вывелся таковым, или был задан явно), то данный параметр игнорируется и функция становится совместимой с функцией без аргументов.
Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Небольшое изменение в языке - лябды с void-параметром
Здравствуйте, catbert, Вы писали:
C>Здравствуйте, VladD2, Вы писали:
VD>>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".
C>Чудесно, а зачем?
это шаг в сторону совместимости с C#, поскольку в нем возможно одну конструкцию delegate {...} воспринимать как лямбду с любым количеством аргументов включая ноль, создать лямбду в Н на все эти случаи было невозможно.
Re: Небольшое изменение в языке - лябды с void-параметром
Здравствуйте, catbert, Вы писали:
VD>>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".
C>Чудесно, а зачем?
В основном для упрощения реализации того самого delegate в конвертере в C#. Но, по жизни, это позволит не задумываться при подключении к событиям и делегатам, когда параметры не нужны.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Небольшое изменение в языке - лябды с void-параметром
Здравствуйте, shakirov.ruslan, Вы писали:
VD>>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".
SR>Круто, лаконично.
И конечно теперь можно писать так: (_) => obj.Method(); например при добавлении обработчиков к EventHandler, вместо того чтобы писать (_, _) => obj.Method()
Re[3]: Небольшое изменение в языке - лябды с void-параметром
Здравствуйте, CodingUnit, Вы писали:
CU>Здравствуйте, shakirov.ruslan, Вы писали:
VD>>>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".
SR>>Круто, лаконично.
CU>И конечно теперь можно писать так: (_) => obj.Method(); например при добавлении обработчиков к EventHandler, вместо того чтобы писать (_, _) => obj.Method()
и даже можно еще короче _ => obj.Method()
Re[3]: Небольшое изменение в языке - лябды с void-параметром
Здравствуйте, CodingUnit, Вы писали:
CU>И конечно теперь можно писать так: (_) => obj.Method(); например при добавлении обработчиков к EventHandler, вместо того чтобы писать (_, _) => obj.Method()
По-моему это и раньше было возомжно. Только лучше _ => ... (т.е. без скобок).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.