Каковы основные отличия между Sinatra и Ramaze?

Не используйте класс enum, если вы хотите отобразить атрибуты в строки. Весь смысл пункта модуля enum состоит в создании набора одноэлементных объектов, которые представляют перечисление, а не строки. Из документации модуля:

Перечисление - это набор символических имен (членов), связанных с уникальными постоянными значениями . В пределах перечисления члены могут сравниваться по тождеству , и само перечисление может быть повторено.)

blockquote>

Мое выделение жирным шрифтом. Строки не являются уникальными, постоянными значениями (я могу создать больше "Fido" строк по желанию) и не предназначены для сравнения по тождеству (хотя иногда , для подмножества строк, вы можете ). [ 1135]

Просто определите свой собственный класс с атрибутами, которые являются строками, напрямую:

class Pets:
    DOG = "Fido"
    CAT = "Kitty"

Ваша бесконечная ошибка рекурсии вызвана недопониманием с вашей стороны относительно того, для чего этот метод используется. Подобно всем специальным методам , object.attr ищет __getattr__ для типа объекта , что означает здесь, что ваш метод применяется к экземплярам вашего Enum подкласса. атрибуты DOG и CAT здесь, а не самому классу, и мешают метаклассу EnumMeta, пытающемуся проверить attibute _value_, который обрабатывается вашим методом __getattr__ с использованием self недавно отчеканенный экземпляр Pets.DOG и item установлены в '_value_', который затем вызывает getattr(Pets.DOG, '_value_'), который вызывает __getattr__ и т. д.

Для вашего подхода к работе вам нужно будет создать подкласс EnumMeta и реализовать __getattribute__ для этого подкласса (__getattr__ только когда-либо вызывается для отсутствующих атрибутов ) , Тем не менее, учтите, что __getattribute__ используется для доступа ко всем атрибутам , поэтому вам нужно сначала позаботиться о проверке экземпляров текущего класса:

class EnumDirectValueMeta(EnumMeta):
    def __getattribute__(cls, name):
        value = super().__getattribute__(name)
        if isinstance(value, cls):
            value = value.value
        return value

class Pets(Enum, metaclass=EnumDirectValueMeta):
    DOG = "Fido"
    CAT = "Kitty"

в какой момент Pets.DOG производит 'Fido'.

19
задан xavdid 30 January 2014 в 08:20
поделиться

3 ответа

Синатра не применяет MVC.

8
ответ дан 30 November 2019 в 02:16
поделиться

Другие легкие Ruby-фреймворки

Мне нравится _why's Camping (сейчас поддерживается сообществом ), который должен быть самым легким из всех ( для получения последней информации [> = v1.9] см. Ссылки для кемпинга на Camping wiki , « Going off the Rails » Элеоноры МакХью или [v 1.5] Слайды Джереми МакЭналли Going Camping или эти скринкасты для кемпинга , этот подкаст о кемпинге и Натаниэль Тэлботт Почему кемпинг имеет значение , но прочтите Список рассылки Camping для информации об изменениях и развитии текущей версии и попробуйте последний пример блога ). Теперь вы также можете прочитать последнюю версию документации по API Camping .

Но я провел массивное трехдневное обследование всех более легких фреймворков Ruby, которые я смог найти, которые выглядели достаточно современными или совершенными (я пытаюсь найти один, чтобы научить студентов основам фреймворков), так что, чтобы Помогите вам принять решение, следующие (с Camping) выделяются из кучи (по крайней мере, с одним именем разработчика, чтобы вы тоже могли их проверить) ...

Для начала, у этих милых людей из Ramaze раньше был список фреймворков Ruby, но ссылка отсутствует , а вот хорошая статья под названием 10 альтернативных веб-фреймворков Ruby . Также существует обсуждение Ruby-форума Camping и Merb , в котором также рассматриваются альтернативные ORM. Помните, что некоторые из нижеприведенных являются пост-мербскими и расширяют этот подход.

Sinatra ( Блейк Мизерани )

Не MVC, нет ORM по умолчанию. Хорошая документация. «Целое веб-приложение может быть инкапсулировано в один файл Sinatra»

Sinatra обзоры и ссылки:

Ramaze ( manveru )

Ramaze хорошо работает с Ruby 1.9.

Ramaze обзоры и ссылки:

Wuby ( Крис Матье )

Из отзывов: «Для запуска приложений Wuby не требуются сторонние приложения или драгоценные камни, а сама библиотека Wuby содержит все необходимое для запуска демона HTTP и начала обслуживания запросов»,

Документация скудна, хотя Хэл Фултон описывает IOWA в The Ruby Way , и хотя ссылка ниже говорит, что все перешло на Swiftcore , это, в свою очередь, говорит они вот-вот появятся в GIT , но по состоянию на 06 июля 2009 года он все еще был пуст. Чтобы еще больше неясно, даты IOWA на RubyForge - 2004 год, так что ...?

Обзоры и ссылки IOWA:

44
ответ дан 30 November 2019 в 02:16
поделиться

Я думаю, что это настоящий вопрос вкусов Синатры и Рамазе. Оба хороши, оба легки.

Большая разница будет в том, что Ramaze больше MVC. Sinatra, с другой стороны, работает как DSL и поддерживает RESTful.

Я бы посоветовал вам прочитать GET_STARTED из них, что займет не более пары минут, и вы увидите, в чем разница.

] Мне лично нравятся они оба (я предпочитаю Ramaze), но одна вещь, которая может помочь вам принять решение, - это тот факт, что Sinatra немного более популярен (я думаю), поэтому вы можете найти больше документов в Интернете.

. С другой стороны, вы можете использовать Ramaze и сделать его более популярным. IRC-канал Ramaze полон людей (включая меня), которые будут рады помочь вам и ответить на все ваши вопросы.

Надеюсь, это поможет. Mig

7
ответ дан 30 November 2019 в 02:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: