Как клонировать объект в Flex?

Как объяснил ответ Дэвида , вам необходимо динамически проверить наличие line.length(), чтобы учесть преобразование вашей строковой строки. Это объясняет вне диапазона.

Тем не менее, здесь есть еще две проблемы.

Первый - это когда стоп-слово находится в конце строки без пробела после . Этот случай в настоящее время пропущен.

Второй - когда строка начинается с последовательности символов стоп-слова, но продолжается чем-то иным, кроме пробела (например, «Затем» вместо «The»). В таком случае замена в настоящее время имеет место, а не должна.

Вы можете решить две проблемы следующим образом:

for(int j=0 ;j<=line.length()-length_of_stopword;j++){
    if ( j+length_of_stopword<=line.length()){
        if ((j==0 || line[j-1]==' ') && (j+length_of_stopword==line.length() 
           || line[j+length_of_stopword]==' ' ) ) {
            if(line.substr(j,length_of_stopword)==word){
                line.replace(j,length_of_stopword,"*");
                no_of_occurence++;
            }
        }
    }
}

Онлайн демо

9
задан approxiblue 2 September 2015 в 23:19
поделиться

5 ответов

То, что Вы хотите, называют глубокой копией, генерируйте новый экземпляр с той же информацией оригинала.

Единственным путем я знаю, как сделать это, использует ByteArray следующим образом:

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

AS3 действительно испытывает недостаток в Object.clone ()...

9
ответ дан 4 December 2019 в 11:08
поделиться

Я не думаю, что ObjectUtil.copy будет работать для клонирования холста. Согласно гибкому документу:

Копировать Этот метод предназначен для копирования объектов данных, например элементов коллекции. Он не предназначен для копирования объекта UIComponent, такого как элемент управления TextInput. Если вы хотите создать копии определенных объектов UIComponent, вы можете создать подкласс компонента и реализовать метод clone () или другой метод для выполнения копирования.

0
ответ дан 4 December 2019 в 11:08
поделиться

Я обнаружил, что пробую что-то вроде этого, увы, похоже, что он все еще не копирует TextArea (он же UI Object) ...

public function duplicateObject(sourceObject:*, targetObject:*):void {
    var buffer:ByteArray = new ByteArray();
    buffer.writeObject(sourceObject);
    buffer.position = 0;
    targetObject = buffer.readObject();
}
1
ответ дан 4 December 2019 в 11:08
поделиться

У меня та же проблема (для созданного мной интерфейса NamedEntity), я искал ответ здесь, но заставил его работать только при вызове метода registerClassAlias ​​(который я взял из http://richapps.de/?p=34). Вот так:

public static function clone(namedEntity:NamedEntity):NamedEntity {
registerClassAlias('test',ReflectionUtil.classByObject(namedEntity));
var returnObject:NamedEntity = ObjectUtil.copy(namedEntity) as NamedEntity;
}
1
ответ дан 4 December 2019 в 11:08
поделиться

ObjectUtil

Статический метод ObjectUtil.copy() является AS3 "Object.clone()":

public static function copy(value:Object):Object

Copies the specified Object and возвращает ссылку на копию. копия сделана с использованием родного техника сериализации. Это означает что пользовательская сериализация будет уважаемый во время копирования.

Этот метод предназначен для копирования объекты данных, такие как элементы Коллекция. Она не предназначена для копирование объекта UIComponent, такого как управление текстовым вводом. Если вы хотите создавать копии конкретного компонента UIComponent объекты, можно создать подкласс из компонент и реализовать клон() метод, или другой метод для выполнения копия.

8
ответ дан 4 December 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: