рекомендуемый способ вернуть несколько переменных из математической функции AS3? - PullRequest
3 голосов
/ 09 ноября 2011

Я новичок в программировании Actionscript.Я пытаюсь выяснить, как лучше всего вернуть из функции несколько переменных, каждая из которых имеет свой тип данных.Например, если функция должна вернуть переменную aa (строку) и переменную bb (число).

Функция, которую я использую, просто перебирает много математики и не относится к объекту в графическом интерфейсе.Один метод, который я получил из поиска в Google, использовал объект, но, поскольку (я думаю) это требует от меня создания класса, я подумал, существует ли более простой способ.Поскольку массив может содержать элементы разных типов данных, возможно, это более простой подход (?).

Вот пример файла mxml и AS3, взятый из «Flash Builder 4 и Flex 4 Bible» Дэвида Гасснера.

файл: 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

//ActionScript code for Calculator.mxml
[Bindable]
private var currentResult:Number=0;
[Bindable]
private var currentInput:String="";

private function calculateHandler(event:Event):void
{
  currentResult += Number(currentInput);
  currentInput="";
}
private function selectHandler(event:TextEvent):void
{
  currentInput += event.text;
}

Может кто-нибудь проиллюстрировать, как изменить одну из функцийв calculator.as, просто в качестве примера, как вернуть два значения, где одно - число, а другое - строка?Есть ли очевидный лучший способ сделать это, или каковы были бы плюсы / минусы разных подходов?Заранее спасибо!

Ответы [ 2 ]

8 голосов
/ 09 ноября 2011

Вы можете просто вернуть Object, который равен dynamic и, таким образом, позволяет определять значения на лету, например:

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

Или:

var obj:Object = {};

obj.something = "string";
obj.another = 18;

return obj;

Но, на мой взгляд, это очень плохая практика (особенно если ваша функция - возвращать те же наборы информации с новыми значениями).

Я бы взял этот маршрут:

Вы можете создать свой собственный класс, который содержит различные свойства. Оттуда вы можете вернуть экземпляр этого объекта со свойствами, определенными по вашему желанию.

Пример:
Это будет во внешнем файле с именем 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
);
2 голосов
/ 09 ноября 2011

Нет необходимости создавать класс, это должно работать для вас:

public function calculate():Object
{
    return {valueA: "string", valueB: 1};
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...