Jun 16, 2009 15:50
Блядские void'ы. Придётся вводить (.net-invoke* ...) для методов, возвращающих void, ибо:
var x = f();является некорректным выражением, если f возвращает void. Ненависть!
Ну вот _зачем_ делать функции, не возвращающие _ничего_? Почему не обойтись возвращением null?? Ну или сделать void полным типом.
lisp,
.net,
мимолетное,
ненависть,
профзаметки
Leave a comment
Comments 17
Reply
Reply
а можешь подробнее расписать задачу, я тогда буду более уверен (или не уверен =)) в том, что в голову пришло
Reply
Каждая языковая конструкция -- макрос (например, .net-invoke, .net-setq, .net-let, etc). Этот макрос разворачивается в собственно лисповый код, генерирующий соотв. код целевого языка. Лисповый код представляет из себя вывод в поток необходимых выражений + возвращение некого значения.
Большинство конструкций разворачиваются лисповый код, который выводит в выходной поток строки вида: "var = ;" (где xxx -- временная переменная, yyy соотв. конструкция хостового языка) и возвращает xxx.
И всё бы хорошо. НО! для некоторых конструкций (например вызова функции, возвращающей void) такой целевой код некорректен. Кодогенератор сам по себе ничего не знает о прототипах функций. Вот и приходится вводить дополнительную конструкцию .net-invoke*, которая будет разворачиваться в "yyyy();".
Такие дела.
Reply
Интересно читать возмущения по поводу void.
Постоянно просто кожу на Java.
Кстати возвращать null тут не хороший тон - можно спровоцировать NullPointerException.
Эх... только привыкать тебе.
А то если наллов навозвращаешь, не поймут тебя товарищи дотнетовцы.
Reply
Который тут был бы вполне допустим, ибо нефиг разыменовывать результат функции, которая его "не имеет".
И я возмущаюсь в первую очередь против того, возвращаемого значения _нет_. Т.е. я не могу получить это значение (пусть даже и для того, чтобы его потом просто отбросить). Собственно, это является классической проблемой с неполным типом void.
Эх... только привыкать тебе.
Вот ещё, привыкать) Я уж скорее CL для .NET реализую ^_^. и будет у меня всё возвращать значение. А наружу уж так и быть, напишу обёртку, где лишние значения будут игнорироваться.
А то если наллов навозвращаешь, не поймут тебя товарищи дотнетовцы.
А мой код товарищи дотнетовцы (обычно под этим словом понимаются C#/VB.NET-программисты) ни так, ни так не поймут, ибо он на лиспе) А нагенерённый читать не надо, не для того он.
Reply
Я ж о том.
В лиспе там же ж всё, вроде, списки какие-то возвращает?
В общем воид тебе не по душе :) Эт точно.
А я вот так привык и ничё. Живу :)
Reply
Reply
Дарю идею:
delegate object F();
var x = (new F(() => { ... ; return null; })).Invoke();
Reply
Reply
Reply
Reply
Leave a comment