Учитывая, что это задокументированное поведение, и нужно либо избегать таких функций, либо защищать его таким образом, чтобы защитить любой подход. Для таких вещей я бы рекомендовал написать «бедный человек»; с таким детектором lint, вы можете пойти о восстановлении здравомыслия. Кроме того, для обнаружения ворса существует несколько подходов к предотвращению сбоев в полярных орбитах Марса, некоторые из них независимы друг от друга, другие зависят:
- Установите политику & amp; строить альтернативы. Во-первых, для всех функций, которые, как вы знаете, вызывают проблемы, либо решите, что вы их не будете использовать, либо напишите новую функцию-оболочку, которая будет вести себя так, как предполагалось, и установит желаемый вами параметр часового пояса. Затем убедитесь, что вы используете эту специальную оболочку, а не базовую функцию.
- Статический анализ Напишите функцию поиска, используя ваш любимый редактор (например, как макрос), используя сценарий оболочки и amp; функции GNU
find
и grep
или каким-либо другим способом (например, grep
в R), чтобы найти те конкретные функции, которые вызывают проблемы. Когда обнаружено, удалите или используйте защитный метод кодирования (например, обертка в # 1). - Тестирование Использование модульных тестов, например.
Runit
или testthat
, разработайте тесты, которые гарантируют сохранение свойств часового пояса при использовании ваших функций или пакета. Каждый раз, когда появляется новая ошибка, создайте новый тест, чтобы убедиться, что ошибка не появляется снова в выпущенных версиях. - Проверка слабых типов. Вы также можете включать тесты на протяжении всего кода, которые проверяют, указан ли часовой пояс. Лучше иметь собственную функцию для этого теста, а не писать блок кода, который воспроизводится повсюду. Таким образом, вы можете в конечном итоге расширить проверку, включив другие типы проверок, такие как сохранение часового пояса и тесты на то, работают ли операции над двумя или несколькими объектами разницы во временных часах (возможно, они позволяют это, возможно, они не ).
- Отметить все на один TZ. Также известен как Indiana-be-damned . Сохранение различных политик в отношении часовых поясов - это тяжелая работа и, по существу, является трением в работе с временными данными. Просто перейдите к одному TZ (UTC), а затем отпустите что-нибудь из местного. Если у вас локальная регулярность, которая является инвариантной для DST, тогда обращайтесь к ней после преобразования из UTC.
Я делаю все # 1-4 для других вопросов, но, так же, как они легко адаптируются к проверке часового пояса, они довольно многократно используются для многих задач Орбита Марса. Я делаю именно это, чтобы избежать кодирования следующего такого Орбита Марса. (Это был дорогой урок для всех нас, работающих с числовыми данными.:))
задан I'm stupid 23 January 2019 в 02:50
поделиться