Apache flex 从数学运算AS3函数返回多个变量的推荐方法?

Apache flex 从数学运算AS3函数返回多个变量的推荐方法?,apache-flex,actionscript,Apache Flex,Actionscript,我是Actionscript编程新手。我试图找出从函数返回多个变量的最佳方法,每个变量都有不同的数据类型。例如,如果函数需要返回变量aa(字符串)和变量bb(数字) 我使用的函数只是处理了大量的数学运算,与GUI中的对象无关。我从谷歌搜索中得到的一个方法使用了一个对象,但(我认为)这需要我创建一个类,我想知道是否有更简单的方法。由于数组可以保存不同数据类型的元素,因此这可能是一种更简单的方法(?) 下面是一个示例mxml和AS3文件,摘自David Gassner的“Flash Builder

我是Actionscript编程新手。我试图找出从函数返回多个变量的最佳方法,每个变量都有不同的数据类型。例如,如果函数需要返回变量aa(字符串)和变量bb(数字)

我使用的函数只是处理了大量的数学运算,与GUI中的对象无关。我从谷歌搜索中得到的一个方法使用了一个对象,但(我认为)这需要我创建一个类,我想知道是否有更简单的方法。由于数组可以保存不同数据类型的元素,因此这可能是一种更简单的方法(?)

下面是一个示例mxml和AS3文件,摘自David Gassner的“Flash Builder 4和Flex 4圣经”

文件:Calculator.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
  xmlns:s="library://ns.adobe.com/flex/spark" 
  xmlns:mx="library://ns.adobe.com/flex/mx" 
  xmlns:components="components.*">
  <fx:Script source="calculator.as"/>
  <s:Panel title="Calculator" horizontalCenter="0" top="20">
    <s:layout>
      <s:VerticalLayout horizontalAlign="center"/>
    </s:layout>
    <mx:Form>
      <components:ButtonTile id="input" 
        select="selectHandler(event)" 
        calculate="calculateHandler(event)"/>
      <mx:FormItem label="Entry:">
        <s:TextInput text="{currentInput}" editable="false" width="80"/>
      </mx:FormItem>
      <mx:FormItem label="Total:">
        <s:TextInput text="{currentResult}" editable="false" width="80"/>
      </mx:FormItem>   
    </mx:Form>

有人能举例说明如何修改calculator.as中的一个函数吗?就像一个示例一样,如何返回两个值,其中一个是数字,另一个是字符串?有没有一个明显的最佳方法可以做到这一点,或者,不同方法的优缺点是什么?提前谢谢

无需创建类,这应该适用于您:

public function calculate():Object
{
    return {valueA: "string", valueB: 1};
}

您只需返回一个
对象
,它是
动态的
,这样您就可以动态定义值,如下所示:

return {something: "string", another: 18};
或:

但在我看来,这是一种非常糟糕的做法(特别是如果您的函数是返回具有新值的相同信息集)

我会走这条路:

您可以创建自己的类来保存各种属性。从那里,您可以返回此对象的一个实例,其属性定义如您所愿

示例:
这将在名为
CollisionData.as

package
{
    public class CollisionData
    {
        public var x:Number = 0;       // X coordinate of the collision
        public var y:Number = 0;       // Y coordinate of the collision
        public var angle:Number = 0;   // Collision angle
    }
}
您的功能可以是:

function calculate():CollisionData
{
    var col:CollisionData = new CollisionData();

    // determine collision details
    col.x = 115;
    col.y = 62;
    col.angle = 0.345;

    return col;
}
然后,您可以根据结果创建自己的碰撞数据:

var myCollision:CollisionData = calculate();
并获取详细信息:

trace(
    myCollision.x,
    myCollision.y,
    myCollision.angle
);

当然,类会让它更清楚这个返回对象代表什么以及如何处理它这会比上面创建一个类和对象执行得更快吗?我认为是一样的,但你必须清楚你的意图,此外,如果你创建一个类,我将帮助其他开发人员,他们将来可能会支持你的代码,为了更容易理解你的回报。如果您返回对象-它不清楚,如果您返回一些用户详细信息,它将更有意义。谢谢Marty!关于您的上一个建议,您能否通过显示哪些代码段位于.as文件中,哪些代码段位于.mxml文件中来帮助我消化您的示例的各个部分?完成的两个文件是什么样子的?(仍然缺少如何将所有内容放在一起的大图)请参阅编辑,了解如何将
CollisionData
放在它自己的文件中。解决这个问题的最简单方法是,每个
类都需要自己的外部文件。如file.ggkmath:如果您确实需要处理许多数字,可以避免每次调用时创建对象。使用静态对象返回数据-但在下次调用时覆盖数据之前,必须从中提取数据。更少的内存波动->更快的执行速度。感谢alxx,更少的内存和更快的执行速度非常重要。你能在一个单独的答案中给出一个例子(更详细)吗?创建一个类背后的想法是,当你回到你的代码的轨道上时,你会知道使用这组数据的函数会带来什么。此外,如果您在信息上输入错误,也会出现错误,从而阻止许多问题的发生。
var myCollision:CollisionData = calculate();
trace(
    myCollision.x,
    myCollision.y,
    myCollision.angle
);