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

Невозможно клонировать вектор с глубокой копией объектов

Это мой вектор, который я хочу полностью клонировать (это означает, что если я изменю клонированный вектор, это не повлияет на исходный вектор).

  var vector:Vector.<Path_Tiles> = new Vector.<Path_Tiles>();
  vector = path_finder.Find_Path(Gird.TILE_SET, start, end, R_G_B, SCAREDNESS);// return a vector of path_tiles in order

и я пытаюсь поместить это в этот вектор

 var vector2:Vector.<Path_Tiles> = clone(vector);

и метод клонирования - это (который я нашел этот метод на веб-сайте, поэтому я не полностью его понимаю)

   public function clone(source:Object):*
    {
        var myBA:ByteArray = new ByteArray();
        myBA.writeObject(source);
        myBA.position = 0;
        return(myBA.readObject());
    }

Но я получаю эту ошибку: «[Fault] exception, information = TypeError: Error # 1034: Type Coercion failed: невозможно преобразовать AS3 .vec :: Vector. @ 85973d1 в AS3 < / Microsport.vec.Vector .. "

Как преобразовать Path_Tiles в объект?


  • Ваш метод клонирования должен возвращать вектор того же типа. 07.08.2014
  • Спасибо за ответ @RajneeshGaikwad. Не могли бы вы сделать быстрый пример / (скопируйте и вставьте мои методы клонирования и измените их на возврат вектора), так как я не уверен, как работает метод клонирования, и все мои его версии не работают . 07.08.2014
  • Вы имеете в виду неглубокий клон, такой как concat(), о котором говорил ваш предыдущий вопрос; или клонирование копий объектов в вашем векторе? 07.08.2014
  • @JasonSturges, этот вопрос связан с моим последним вопросом, и я узнал, что concat () копирует только вектор, а не материал внутри вектора, который я пытаюсь сделать без особой удачи. которые привели меня к этому методу клонирования, который работает с массивами, но не с векторами 07.08.2014
  • @AdamEdney Просто вызовите vector2 = clone(vector); и просто убедитесь, что класс зарегистрирован перед записью в массив байтов. 07.08.2014
  • @JasonSturges я поместил зарегистрированный тайл пути, избавился от цикла и сделал vector2 = clone (vector); но я все еще получаю ту же ошибку: несоответствие количества аргументов в Path_Tiles (). Ожидалось 5, получено 0 для линий tileCloned = byteArray.readObject () as Vector. ‹Path_Tiles›; 07.08.2014
  • @AdamEdney Конструктор вашего класса должен принимать параметры по умолчанию, если параметры требуются. Ответ обновлен ниже. 08.08.2014

Ответы:


1

Убедитесь, что ваш класс Path_Tiles был зарегистрирован:

flash.net.registerClassAlias("tld.domain.package.Path_Tiles", Path_Tiles);

Затем вы можете скопировать, сериализовав данные в ByteArray:

var tiles:Vector.<Path_Tiles>;
var tilesCloned:Vector.<Path_Tiles>;

var byteArray = new ByteArray();
byteArray.writeObject(tiles);
byteArray.position = 0;
tilesCloned = byteArray.readObject() as Vector.<Path_Tiles>;

Преобразуйте readObject() десериализацию в Vector.<Path_Tiles> с помощью ключевого слова as.

Конструкторы сериализованных объектов должны принимать параметры по умолчанию.

Чтобы собрать все это вместе, скажем, это был ваш Path_Tiles класс:

Path_Tiles.as

package
{
public class Path_Tiles
{
    public function Path_Tiles(property1:String=null, property2:int=undefined) {
        this.property1 = property1;
        this.property2 = property2;
    }

    public var property1:String;
    public var property2:int;
}
}

Вот ваш основной класс, показывающий пример глубокого клонирования коллекции Path_Tiles:

Main.as

package
{
import flash.display.Sprite;
import flash.net.registerClassAlias;
import flash.utils.ByteArray;

public class Main extends Sprite
{
    public function Main() {
        super();

        var source:Vector.<Path_Tiles> = new <Path_Tiles>[
            new Path_Tiles("Hello", 1),
            new Path_Tiles("World", 2)
        ];

        var cloned:Vector.<Path_Tiles> = clone(source);
    }

    public function clone(source:Vector.<Path_Tiles>):Vector.<Path_Tiles> {
        flash.net.registerClassAlias("Path_Tiles", Path_Tiles);
        var byteArray = new ByteArray();
        byteArray.writeObject(source);
        byteArray.position = 0;
        return byteArray.readObject() as Vector.<Path_Tiles>;
    }
}
}

Наконец, мы видим, что объект был глубоко скопирован; подтверждается адресом памяти:

vector-deep-copy

07.08.2014
  • обновил свой основной вопрос, так как он не работает, я очень ценю, что вы пытаетесь мне помочь 07.08.2014
  • Ты выйдешь за меня? Все шутки в сторону, большое спасибо (вы, должно быть, думаете, что я дурак). Вы действительно мне помогли, и у меня все работает так, как должно быть. сейчас завтра я исследую все о том, как это работает и почему. Вы были великолепны. Еще раз спасибо :) 08.08.2014
  • Новые материалы

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

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

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

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

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

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

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


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование