IronPython: есть ли альтернатива значительным пробелам? - PullRequest
0 голосов
/ 26 июля 2010

Для быстро меняющихся бизнес-правил я храню фрагменты IronPython в файлах XML.До сих пор это работало хорошо, но я начинаю приходить к тому, что мне нужно больше, чем просто однострочные выражения.

Проблема в том, что XML и существенное пространство, в котором они работают, плохо сочетаются,Прежде чем я перейду на другой язык, я хотел бы знать, есть ли у IronPython альтернативный синтаксис.

Ответы [ 5 ]

5 голосов
/ 26 июля 2010

IronPython не имеет альтернативного синтаксиса. Это реализация Python, и Python использует существенные отступы (все языки используют значительный пробел, не уверен, почему мы говорим о пробелах, когда это только отступ, что необычно в случае Python).

4 голосов
/ 26 июля 2010
>>> from __future__ import braces
  File "<stdin>", line 1
    from __future__ import braces

                                 ^
SyntaxError: not a chance
3 голосов
/ 26 июля 2010

Все, что я хочу, это то, что позволит моим пользователям писать код вроде

Ммм ... Не делай этого. Вы на самом деле не хотите этого. В конечном итоге это приведет к бесконечным небольшим проблемам, потому что вы пытаетесь навязать слишком много контента в атрибут.

Сделай это.

<Rule Name="Markup">
    <Formula>(Account.PricingLevel + 1) * .05</Formula>
</Rule>

Вы должны стараться не иметь значимых, значимых вещей в атрибутах. Как общая политика разработки XML, вы должны использовать теги и сохранять атрибуты для имен, идентификаторов и т.п. Когда вы смотрите на хорошо выполненные XSD и DTD, вы видите, что атрибуты используются минимально.

Наличие тела правила в отдельном теге (не атрибуте) экономит много боли. И это позволяет инструменту предоставлять правильные разделы CDATA. Используйте такой инструмент, как Altova XML Spy, чтобы убедиться, что у ваших тегов есть место, сохраненное правильно.

2 голосов
/ 26 июля 2010

Помимо уже упомянутых разделов CDATA, есть pindent.py , который, среди прочего, может исправить поврежденные отступы на основе комментариев а-ля #end if - чтобы процитировать связанный файл:

Когда он вызывается как "pindent -r", он предполагает, что его ввод - это программа на Python с комментариями о закрытии блока, но с ошибкой в ​​отступе, и выводит версию с правильным отступом.*

«Закрывающий блок комментарий» - это комментарий вида «# end », где - ключевое слово, открывшее блок.Если открывающим ключевым словом является «def» или «class», имя функции или класса может быть повторено и в комментарии о закрытии блока.Вот пример программы, полностью дополненной комментариями о закрытии блока:

def foobar(a, b):
    if a == b:
        a = a+1
    elif a < b:
        b = b-1
        if b > a: a = a-1
        # end if
    else:
        print 'oops!'
    # end if
# end def foobar

Она запутана в CPython, но если у IronPython его нет, просто возьмите его из хранилища.

2 голосов
/ 26 июля 2010

Я думаю, что вы можете установить атрибут xml:space="preserve" или использовать <![CDATA[, чтобы избежать других проблем, например с кавычками и большими знаками равенства.

...