AS3: Можем ли мы пропустить необязательный параметр и присвоить значение параметру после пропущенного? - PullRequest
3 голосов
/ 14 декабря 2010

Можем ли мы пропустить необязательный параметр и присвоить значение параметру после пропущенного?

Например, у меня есть функция:

public function Dialog(message:String,title:String="Note",dialogsize:int=99):void
{
}

Я могу легко вызвать функцию с сообщением и заголовком:

 Dialog("HELLO","Intro");

Есть ли способ пропустить заголовок и просто перейти в размер диалогового окна? Я пробовал, но не могу заставить его работать:

Dialog("HELLO",,dialogsize);

Можно ли пропустить некоторые необязательные параметры без использования параметра (rest)?

Ответы [ 3 ]

6 голосов
/ 14 декабря 2010

Вы можете передать null для параметра «по умолчанию», и as3 будет использовать значение по умолчанию - так же, как если бы вы его полностью опустили:

Dialog("HELLO",null,dialogsize);

Edit

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

Что-то вроде этого поможет:

public function Dialog(message:String,title:String=null,dialogsize:int=99):void
{
    if(title===null) title = "Note";

}
2 голосов
/ 14 декабря 2010

это невозможно, но вы можете сделать что-то вроде:

public function Dialog(message:String, optionalArgs: Object):void{
    var title: String = optionalArgs['title'] ? optionalArgs['title'] : 'default value';
    var dialogsize: int =  optionalArgs['dialogsize'] ? optionalArgs['dialogsize'] : 99;
    var smthElse: String =  optionalArgs['smthElse'] ? optionalArgs['smthElse'] : 'another default val';
}

и:Dialog('msg', {dialogsize: 250, smthElse: 'another value'});

1 голос
/ 14 декабря 2010

Я бы использовал оцененный объект вместо объекта для большего контроля над содержимым:

// DialogVO.as
package
{
    public class DialogVO
    {
        public var message : String;
        public var title : String;
        public var size : int;
    }
}

// Test.as
public function createDialog(vo : DialogVO) : void
{
    if(vo.title)
        // write code for title here

    if(vo.message)
        // write code for meassage here

    if(vo.size)
        // write code for size here
}

// test your method
var dialogData : DialogVO = new DialogVO();
    dialogData.message = "This is the message";
    dialogData.size = 92;

createDialog(dialogData);
...