отличие Optional macro @if и macro ForIndex
От: mister-AK Россия  
Дата: 25.11.10 22:23
Оценка:
к сожалению обсуждение
Автор: Чистяков Влад (VladD2)
Дата: 31.07.07
статьи уже закрыто, опишу здесь вопрос.

прочитав
Автор(ы): Чистяков Владислав Юрьевич
Дата: 18.08.2011
Во второй части статьи о макросах Nemerle речь пойдет о макросах уровня выражения, о макросах, изменяющих синтаксис языка, а также о контексте компиляции, доступном в макросах, и тех возможностях, которые он предоставляет (типизации выражений, получении доступа к описанию типов проекта, информации о методах и т.п.).
про Создание макросов-выражений

не понял вот что:

macro @if (cond, e1, e2)
syntax ("if", "(", cond, ")", e1, Optional (";"), "else", e2)


...
Мы не сможем применить данный макрос без конструкции else (как это делается в C), так как else является обязательным ключевым словом, а сделать его необязательным не позволяет неоднозначность (ведь if может применяться в выражениях!).


почему нельзя так?:
syntax ("if", "(", cond, ")", e1, Optional (";"), Optional ("else", e2))


вроде если макросы выдают void, то в случае если выражение условия ложно результат и так будет NULL? никаких рекурсий вроде

разделом ниже ведь такое прокатывает:
macro ForIndex (expr, step, body)
syntax ("forindex", "(", expr, Optional ("step", step), ")", body)


или я что-то непонял походу обяъснения "плоской схемы" макросов?
Re: отличие Optional macro @if и macro ForIndex
От: hardcase Пират http://nemerle.org
Дата: 26.11.10 05:48
Оценка: +1
Здравствуйте, mister-AK, Вы писали:

MA>к сожалению обсуждение
Автор: Чистяков Влад (VladD2)
Дата: 31.07.07
статьи уже закрыто, опишу здесь вопрос.


MA>прочитав
Автор(ы): Чистяков Владислав Юрьевич
Дата: 18.08.2011
Во второй части статьи о макросах Nemerle речь пойдет о макросах уровня выражения, о макросах, изменяющих синтаксис языка, а также о контексте компиляции, доступном в макросах, и тех возможностях, которые он предоставляет (типизации выражений, получении доступа к описанию типов проекта, информации о методах и т.п.).
про Создание макросов-выражений


MA>не понял вот что:

MA>

MA>

MA>macro @if (cond, e1, e2)
MA>syntax ("if", "(", cond, ")", e1, Optional (";"), "else", e2)
MA>


MA>...
MA>Мы не сможем применить данный макрос без конструкции else (как это делается в C), так как else является обязательным ключевым словом, а сделать его необязательным не позволяет неоднозначность (ведь if может применяться в выражениях!).


MA>почему нельзя так?:

MA>
MA>syntax ("if", "(", cond, ")", e1, Optional (";"), Optional ("else", e2))
MA>


Можно в принципе.
Только сокращенная форма такого if не может быть применена в выражении, так как ее тип получается void.
Тут скорее вопрос стиля. Когда я вижу в коде if я сразу понимаю что гдето дальше будет else. Когда я вижу when/unless — я понимаю что это охранное условие, и никакого else ниже по коду не будет.
/* иЗвиНите зА неРовнЫй поЧерК */
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.