Небольшое изменение в языке - лябды с void-параметром
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.10.11 15:01
Оценка: 24 (2)
Всем привет.

Седелал так что теперь, если у лямбды или функции параметр имеет имя "_" и его тип является void (вывелся таковым, или был задан явно), то данный параметр игнорируется и функция становится совместимой с функцией без аргументов.

Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Небольшое изменение в языке - лябды с void-параметром
От: catbert  
Дата: 04.10.11 18:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".


Чудесно, а зачем?
Re[2]: Небольшое изменение в языке - лябды с void-параметром
От: CodingUnit Россия  
Дата: 05.10.11 06:38
Оценка:
Здравствуйте, catbert, Вы писали:

C>Здравствуйте, VladD2, Вы писали:


VD>>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".


C>Чудесно, а зачем?


это шаг в сторону совместимости с C#, поскольку в нем возможно одну конструкцию delegate {...} воспринимать как лямбду с любым количеством аргументов включая ноль, создать лямбду в Н на все эти случаи было невозможно.
Re: Небольшое изменение в языке - лябды с void-параметром
От: shakirov.ruslan  
Дата: 05.10.11 07:10
Оценка:
VD>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".

Круто, лаконично.
Re[2]: Небольшое изменение в языке - лябды с void-параметром
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.10.11 14:29
Оценка:
Здравствуйте, catbert, Вы писали:

VD>>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".


C>Чудесно, а зачем?


В основном для упрощения реализации того самого delegate в конвертере в C#. Но, по жизни, это позволит не задумываться при подключении к событиям и делегатам, когда параметры не нужны.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Небольшое изменение в языке - лябды с void-параметром
От: CodingUnit Россия  
Дата: 07.10.11 09:37
Оценка:
Здравствуйте, shakirov.ruslan, Вы писали:

VD>>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".


SR>Круто, лаконично.


И конечно теперь можно писать так: (_) => obj.Method(); например при добавлении обработчиков к EventHandler, вместо того чтобы писать (_, _) => obj.Method()
Re[3]: Небольшое изменение в языке - лябды с void-параметром
От: CodingUnit Россия  
Дата: 07.10.11 09:50
Оценка:
Здравствуйте, CodingUnit, Вы писали:

CU>Здравствуйте, shakirov.ruslan, Вы писали:


VD>>>Таким образом лямбда "fun(_) { ... }" стала аналогична C#-повскому "delegate { ... }".


SR>>Круто, лаконично.


CU>И конечно теперь можно писать так: (_) => obj.Method(); например при добавлении обработчиков к EventHandler, вместо того чтобы писать (_, _) => obj.Method()


и даже можно еще короче _ => obj.Method()
Re[3]: Небольшое изменение в языке - лябды с void-параметром
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.10.11 13:41
Оценка:
Здравствуйте, CodingUnit, Вы писали:

CU>И конечно теперь можно писать так: (_) => obj.Method(); например при добавлении обработчиков к EventHandler, вместо того чтобы писать (_, _) => obj.Method()


По-моему это и раньше было возомжно. Только лучше _ => ... (т.е. без скобок).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.