Другая ошибка сценария Actionscript для новичка 1118: неявное приведение значения со статическим типом Object к возможному - PullRequest
0 голосов
/ 26 февраля 2012

Я получаю эту ошибку при компиляции проекта AS3 / Flex:

Error 1118: Implicit coercion of a value with static type Object to a possibly 
unrelated type HRPeople

Я четко объявил, что dataHR_A относится к классу HRPeople, и я инициализировал все массивы в файле HRPeople.as. Не уверен, почему я получаю эту ошибку.

Мой код MXML выглядит так (фрагмент):

<?xml version="1.0" encoding="utf-8"?>
<s:Application 
    creationComplete="initApp()"
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark"
    xmlns:mx="library://ns.adobe.com/flex/mx">

    <fx:Script>
        <![CDATA[                   
            public var dataHR_A:HRPeople = new HRPeople;

            public function initApp():void
            {               
                //preallocate memory
                dataHR_A.elements = 5;
                dataHR_A.FirstName = new Array(dataHR_A.elements);
                dataHR_A.LastName = new Array(dataHR_A.elements);
                dataHR_A.Email = new Array(dataHR_A.elements);
                dataHR_A.Salary = new Array(dataHR_A.elements);

                dataHR_A = {  // ERROR IS ON THIS LINE OF CODE
                    FirstName:["Donald","Douglas","Jennifer","Michael","Pat"],
                    LastName:["OConnell","Grant","Whalen","Hartstein","Fay"],
                    Email:["OCONNELL","DGRANT","JWHALEN","MHARTSTE","PFAY"],
                    Salary:[2600, 2600, 4400, 13000, 6000]};
            }
and so on ...

Вот файл класса для HRPeople.as:

package {
    public class HRPeople {
        public var elements:int;
        public var FirstName:Array = [];
        public var LastName:Array = [];
        public var Email:Array = [];
        public var Salary:Array = [];
    }
}

1 Ответ

1 голос
/ 26 февраля 2012

Этот синтаксис нельзя использовать в ActionScript 3. Поскольку {...} является объектом, а dataHR_A равен HRPeople.Чтобы это работало, вам нужно написать так:

dataHR_A.elements = 5;
dataHR_A.FirstName = ["Donald","Douglas","Jennifer","Michael","Pat"];
dataHR_A.LastName = ["OConnell","Grant","Whalen","Hartstein","Fay"];
dataHR_A.Email = ["OCONNELL","DGRANT","JWHALEN","MHARTSTE","PFAY"];
dataHR_A.Salary = [2600, 2600, 4400, 13000, 6000]};

Также вы можете просто установить свойства напрямую, вам не нужно выделять память.чем установка свойства elements самостоятельно, вы можете просто создать getter, который будет динамически получать количество элементов.Таким образом, вы можете добавлять новые элементы, не беспокоясь о поддержании elements в актуальном состоянии.Нечто подобное будет работать:

package {
    public class HRPeople {
        public function get elements():int {
            return FirstName.length;
        }
        public var FirstName:Array = [];
        public var LastName:Array = [];
        public var Email:Array = [];
        public var Salary:Array = [];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...