Nano Hash - криптовалюты, майнинг, программирование

Использование дат в защитных операторах функции erlang

Я определил функцию, как показано ниже

bc_link_for(Date) when Date < {2010, 1, 4} orelse Date > erlang:date()
    -> "";
bc_link_for(_)
    -> "something".

Второе защитное заявление относится к будущим датам. Когда я компилирую эту программу, я получаю ошибку illegal guard expression. В Интернете не так много помощи, связанной с использованием типов даты в операторах защиты.

26.01.2013

Ответы:


1

Функции, как правило, не допускаются в охранах, за исключением определенных функций охранников, таких как is_integer, is_float, is_list, length и т. д.

Но в вашем случае erlang:date() выдает ошибку.

Вам просто нужно выполнить сравнение внутри функции:

bc_link_for(Date) ->
    case Date < {2010, 1, 4} orelse Date > erlang:date() of
        true -> "";
        false -> "something"
    end.

Использование кортежа в сравнении вполне допустимо в охранниках.

26.01.2013
  • В дополнение к отличному ответу @chops, причина, по которой охранники не могут вызывать произвольные функции, заключается в том, что они должны быть гарантированно свободны от побочных эффектов. См. goo.gl/KUzFD. 27.01.2013

  • 2

    Охранные выражения ограничены тем, что в них разрешено. Это должно помочь оптимизатору, среди прочего. Они задокументированы здесь:

    http://www.erlang.org/doc/reference_manual/expressions.html#id79673

    26.01.2013
  • Итак, мой первый оператор защиты принят, потому что он считается обычным кортежем, а не типом даты? 27.01.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..