新手问题:我在ActionScript项目上使用Flash Builder 4.5。我创建了以下类:
package
{
public class ComplexNumber
{
public var real:Number; // real component
public var imag:Number; // imaginary component
}
}
和
package
{
public class ComplexArray
{
public var real:Array; // real component array
public var imag:Array; // imaginary component array
}
}
和静态函数:
package
{
public class ComplexDivide
{
public static function v1p0(a:Number, b:Number, // numerator: a+bi
c:Number, d:Number // denominator: c+di
):ComplexNumber
{
var z:ComplexNumber = new ComplexNumber();
var divisor:Number = c*c + d*d;
z.real = (a*c + b*d) / divisor; // real component
z.imag = (b*c - a*d) / divisor; // imaginary component
return z;
}
}
}
在另一个.as文件中,我试图调用此函数
var BXFN_complex:ComplexArray = new ComplexArray();
for (var ii:int = 0; ii <= 2; ii++) {
BXFN_complex[ii] = ComplexDivide.v1p0( 1, 0, 2, 3 );
}
但是此循环内的代码会生成以下运行时错误:&#34; ReferenceError:错误#1056:无法在ComplexArray上创建属性0。&#34;因此,我的代码是&#34; BXFN_complex [ii] =〜&#34;是不正确的。任何人都知道如何实现我想要做的事情?基本上,ComplexDivide.v1p0返回两个数字,而BXFN_complex是一个包含两个数字数组的对象,我想将ComplexDivide两个数字分配给BXFN_complex中数组的第二个元素。
答案 0 :(得分:2)
我不确定我理解你想要完成什么,坦率地说我发现你的代码难以阅读,但错误的原因很简单:
您的ComplexArray实例的行为与Array不同 - 它是一个包含两个成员数组的实体和图像的对象,您需要指定您正在寻址的实体:
BXFN_complex.real[ii]
或
BXFN_complex.imag[ii]
而不仅仅是
BXFN_complex[ii]
如果您只想传入ComplexNumber类型,可以使用函数来执行此操作:
(on ComplexArray):
public function setItemAt (index:int, n:ComplexNumber) : void {
real[index] = n.real;
imag[index] = n.imag;
}
在添加项目之前,不要忘记初始化real和imag数组!
最后但并非最不重要的是我不明白为什么你不使用包含ComplexNumbers的原始数组,而不是使用包含两个原始Number值数组的ComplexArray - 那么你可以像你一样使用BXFN_complex[ii]
之前做过。