0

我想将一些变量从一个类传递到另一个类,但下面的代码不起作用。

package a {
  public class a {
    public var a_var:String;
    public var x_var:String;
    public function a() {
      var a_var = 'My name';
      var x_var = 'X string';
    }
    public function show_a():String {
      return a_var;
    }       
  }

  public class b {
    public function b() {
      var a_obj:a = new a();
      trace('trace' + a_obj.a_var); //is this wrong?
      trace(a_obj.show_a()); //is this possible? if so, what would be the output?
    }
  }  
}

当我尝试a_var从一个类传递a到另一个类时ba_obj.a_var返回一个空值。

我怎样才能做到这一点?

4

3 回答 3

1

在您的类中,构造函数替换:

public function a() {
    var a_var = 'My name';
    var x_var = 'X string'
}

和:

public function a() {
    this.a_var = 'My name';
    this.x_var = 'X string'
}

关键字var在构造函数中创建局部变量,以便在流离开构造函数后对变量进行垃圾收集。
通过使用this您将值分配给实例变量,这是您在这种情况下想要的。

于 2009-09-22T10:41:30.787 回答
0

这是因为在 a 的构造函数中,您没有分配给类字段 a_var 和 x_var。您在构造函数块的末尾声明了具有本地范围并超出范围的同名变量。尝试从这 2 行的开头删除 var:

var a_var = 'My name';
var  x_var = 'X string'

……一切都会好的。

于 2009-09-22T10:41:50.533 回答
0

在声明中不能有多个类package{}。要么将它们拆分为两个文件,要么从其中取出一个类package{}并删除其public访问修饰符。

//A.as
package a
{
  public class A
  {
    //constructor and stuff
  }
}
class B
{
  //class B goes here
}

或者

//A.as
package a
{
  public class A
  {
    //constructor and other stuff
  }
}
//B.as
package a
{
  public class B
  {
    //constructor and other stuff
  }
}

是的,正如 spender 指出的那样,你必须var从构造函数中删除声明。

于 2009-09-22T10:54:18.153 回答