Хобрук: Ваш путь к мастерству в программировании

Использование Curry для определения тегов Grails

У меня есть библиотека тегов Grails TpTagLib и в ней я хочу определить 4 новых тега, которые отличаются только одним постоянным значением, поэтому я попытался использовать curry. Но есть исключение: groovy.lang.MissingPropertyException: Нет такого свойства: attr для класса: TpTagLib

Кто-нибудь знает, почему возникает это исключение? Вот код:

def ifPermsTag = { permissions, attr, body ->
    def user = attr?.user ?: session.userInstance
    if( !user ) return false
    if( !securityService.hasPermissions(user,permissions) ) return false
        out << body()
    return true
}


def canAdminRequestmaps = ifPermsTag.curry(Permission.CAN_ADMIN_REQUESTMAPS)
def canAdminCorporations = ifPermsTag.curry(Permission.CAN_ADMIN_CORPS)
def canAdminUsers = ifPermsTag.curry(Permission.CAN_ADMIN_USERS)    
def canAdminDevices = ifPermsTag.curry(Permission.CAN_ADMIN_DEVICES)    

  • есть трассировка стека, которую вы можете опубликовать? 03.09.2009
  • Хорошо, теперь я чувствую себя тупым. Я снова попробовал тот же код, просто скопировав и вставив это место, и это сработало. 03.09.2009

Ответы:


1

Крутая техника. Вам просто нужно сделать ifPermsTag закрытым, чтобы он не считался кандидатом на использование в качестве метода тега:

private ifPermsTag = { permissions, attr, body ->
...
}

Теги могут не иметь параметров или иметь параметр attr или параметры attr и body, но другие подписи недействительны.

03.09.2009
  • Поскольку другие подписи недействительны для тега, я на самом деле рассчитывал, что он не будет восприниматься как тег, но приватность — хороший способ убедиться в этом. Спасибо. 03.09.2009
  • Новые материалы

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..