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

DartPad продолжает говорить, что ожидает 2, получает 3 аргумента в конструкторе

Email( List<String> to, String from, {String subject:null, String message:null, DateTime datetime:null, HashMap<String, List<String>> meta:null, List<Attachment> attachments:null})

получить эту ошибку:

Uncaught NoSuchMethodError: incorrect number of arguments passed to method named ''
Receiver: ""
Tried calling: (Instance of 'JSArray<String>', "[email protected]", Instance of '_HashMap<String, Object>')
Found: (to, from, subject, message, datetime, meta, attachments)

Мой класс:

class Email{
  Email( List<String> to, String from, {String subject:null, String message:null, DateTime datetime:null, HashMap<String, List<String>> meta:null, List<Attachment> attachments:null}){
    //do stuff.
  }
}

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

DartPad находится по адресу: https://dartpad.dartlang.org/4d32b88095a6509da511.

Найдите TODO

Класс Composer — это часть, которую я реализую, используя класс Email, который я создал.

Добавьте текст в тему, а затем нажмите кнопку «Отправить».

19.01.2016

  • Не могли бы вы добавить ссылку на свой DartPad. DartPad имеет функцию обмена. 20.01.2016
  • @GünterZöchbauer ну вот 20.01.2016
  • похоже, что некоторые веб-сайты используют сопоставление для необязательных параметров, назначая ключ как: this.something тогда как я думал, что могу установить ключ для переменной, которую я тогда смогу проверить, {String something: "hello" } так что есть переменная в этой области называется: something 20.01.2016
  • @GünterZöchbauer Кажется, когда я смотрел на пример, я передавал HashMap в место третьего аргумента, тогда как он искал встроенные явные определения. Итак, пока я говорил: Email(to,from,map), я должен сказать: Email(to, from, subject:map["subject"]);, что приводит меня к моему продолжению, есть ли способ передать карту, возможно, с помощью функции применения, или действительно нет способа сделать то, что я думал? может быть, вместо этого обернуть его как карту? {var map: null}, а затем произнесите: Email(to,from, map:map);? 20.01.2016

Ответы:


1

Конструктор вашего класса Email

Email( List<String> to, String from, {String subject:null, String message:null, DateTime datetime:null, HashMap<String, List<String>> meta:null, List<Attachment> attachments:null}) { ... }

имеет 2 позиционных аргумента и 5 необязательных именованных аргументов.

Вы можете просто передать позиционные параметры, как вы это делали в

new Email(map["to"], map["from"], map);

но необязательные параметры имен должны быть "названы", как

new Email(map["to"], map["from"], subject: map);

Если вы хотите, чтобы необязательные параметры были позиционными, вам нужно изменить конструктор на

Email( List<String> to, String from, [String subject=null, String message=null, DateTime datetime=null, HashMap<String, List<String>> meta=null, List<Attachment> attachments=null]) { ... }

У вас не может быть одновременно необязательных именованных и необязательных позиционных аргументов. Если у вас есть более длинный список параметров, как в вашем конструкторе Email, именованные необязательные аргументы обычно лучше, потому что вы можете указать с помощью имени, какому параметру должно быть присвоено переданное значение, и нет необходимости передавать nulls или ''s для параметров, которые вы хотите пропускать.

20.01.2016
  • что, если я создам переменную опций, подобную этому конструктору: Email (List<String> to, String from, [HashMap<String, Object> options = null]){...}, и таким образом я создам карту до опций вместо того, чтобы передавать кучу переменных. Затем просто прочитайте эту карту для определенных ключей и обработайте ее соответствующим образом? 20.01.2016
  • Например: Email( List<String> to, String from, [HashMap<String, Object> options = null]) { this._to = to; this._from = from; if (options == null) return; this._subject = options.containsKey("subject")?options["subject"]:null; this._message = options.containsKey("message")?options["message"]:null; this._metadata = options.containsKey("meta")?options["meta"]:null; this._datetime = options.containsKey("datetime")?options["datetime"]:new DateTime.now(); this._attachments = options.containsKey("attachments")?options["attachments"]:null; } 20.01.2016
  • Вы можете сделать это, конечно. Map, вероятно, будет лучше, чем HashMap. Я не вижу необходимости указывать конкретную реализацию карты. Я бы предпочел класс EmailOptions, потому что я предполагаю, что набор поддерживаемых опций фиксирован. Это обеспечило бы правильное автодополнение, проверку типов анализатора и более простой синтаксис для пользователя класса Email. 20.01.2016
  • правда, просто абстрагируйте это в другой класс для правильной обработки вместо того, чтобы делать это внутри класса Email. Мне это нравится. Я думаю, что вместо этого я пойду по этому пути.... с картой опций. таким образом, существующая карта может быть передана, и нужно будет просто изменить ссылку с subject на options["subject"] 20.01.2016
  • Новые материалы

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

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

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

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

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

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

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