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

Рекомендации по работе с файлами внешних функций в AS3/CS5

Недавно разработчик Flash сказал мне, что я уважаю использование

include "functions_file.as";

не подходит для импорта списка функций в документ AS3, Flash CS5.

Мы не говорим об объектах и ​​пакетах, просто список функций.

Итак, как лучше всего это сделать?


  • @poke, статические классы имеют смысл в строго типизированной парадигме ООП, но в ActionScript (и, более конкретно, в ECMAScript) функция с пространством имен по существу эквивалентна. В этом случае статический класс, по сути, заменяется пакетом. 15.03.2011

Ответы:


1

Ваши разные функции принадлежат своим собственным файлам, как и ваши классы:

package foo.bar
{
  public function baz(fizz, buzz)
  {
    return fizz * buzz + 7;
  }
}

А затем используйте директиву import точно так же, как для класса:

import foo.bar.baz;

Важным отличием является то, что директива include будет выполнять файл каждый раз, когда он вызывается, что, по сути, будет переписывать функции каждый раз, когда он вызывается.

14.03.2011
  • Как выглядит имя/структура файла? 15.03.2011
  • так же, как если бы вы написали класс: /foo/bar/baz.as 15.03.2011
  • Можете ли вы по-прежнему получить доступ к функции, вызвав baz(); напрямую? 15.03.2011
  • На самом деле, из вашего примера видно, что в этом классе может быть только одна функция. У меня есть несколько библиотек функций, которые я пытаюсь упаковать. 15.03.2011
  • Вам нужно будет позвонить import foo.bar.baz;, прежде чем вы сможете напрямую позвонить baz(). Если вы импортировали другую функцию с тем же именем (другой пакет): fizz.buzz.baz вам нужно будет использовать полные имена для вызова либо: foo.bar.baz(); fizz.buzz.baz(); 15.03.2011
  • @jerebear, в примере нет классов. Мне кажется, вы никогда не использовали ООП AS с классами во внешних файлах. Если вам нужно несколько функций в одном пакете, вам просто нужно указать один и тот же пакет. Я повторю, что ваши различные функции принадлежат отдельным файлам. 15.03.2011
  • Я думаю, это должно быть так. Есть ли способ упаковать группу функций в один файл без использования include? 15.03.2011
  • Есть ли причина, по которой все ваши функции должны быть в одном файле? Все равно они должны быть в одном каталоге. Вы могли поместить их в статический класс, но тогда вам нужно было бы вызывать StaticClass.foo() и StaticClass.bar() вместо foo(), bar(). Если это просто потому, что вы хотите импортировать все функции одной строкой, вы можете использовать import foo.bar.*, чтобы добавить весь пакет функций. 15.03.2011
  • И это то, что я пытаюсь сделать. У меня есть несколько разных библиотек функций. Каждая функция имеет одну цель. У меня есть файл, настроенный как /com/expo/booths.as, и в моем коде import com.expo.*, и ни одна из функций не выполняется. 15.03.2011
  • вы связали библиотеку с файлом fla (или она находится в том же каталоге, что и файл .fla)? Вы правильно указали пакет в каждом файле? 15.03.2011
  • Кажется, я понял, чего мне здесь не хватает. Спасибо за вашу помощь! 15.03.2011

  • 2

    В общем, в 99,9% случаев я соглашусь.

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

    import complete.as
    
    // inside complete.as
    this.dispatchEvent(new Event(Event.COMPLETE, true));
    this.stop();
    
    //  Note : dispatchEvent and stop are 
    //  the only function calls I'd feel 
    //  comfortable putting on a keyframe script.
    

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

    14.03.2011
  • Я считаю, что директива include также полезна, когда вы хотите добавить расширения среды выполнения к классам flash через прототип: if (!Array.prototype.foo) Array.prototype.foo=function(){...}; К сожалению, некоторые базовые классы заблокированы как final, что препятствует расширению среды выполнения. Я хотел бы добавить пару функций в Number, вместо этого я должен писать обертки. 15.03.2011
  • Новые материалы

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

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

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

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

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

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

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