почему перегрузка не поддерживает в Actionscript?

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

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

5
задан Cœur 18 March 2017 в 08:29
поделиться

5 ответов

Как вы говорите, перегрузка функций не поддерживается в Action Script (и, следовательно, даже во Flex).

Но функции могут иметь параметры по умолчанию, например, здесь:

public function DoSomething(a:String='', b:SomeObject=null, c:Number=0):void

DoSomething может быть вызван 4 различными способами:

DoSomething()
DoSomething('aString')
DoSomething('aString', anObject)
DoSomething('aString', anObject, 123)

Такое поведение может быть вызвано тем, что Action Script следует стандарту ECMA Script. Функция действительно является одним из свойств объекта, поэтому, как вы НЕ МОЖЕТЕ иметь два свойства с одинаковым именем, вы НЕ МОЖЕТЕ иметь две функции с одинаковым именем. (Это всего лишь гипотеза)

Вот стандарт ECMA-262 (спецификация языка ECMAScript) в разделе 13 (стр. 83 файла PDF) говорит, что когда вы объявляете функцию вроде

function Identifier(arg0, arg1) {
    // body
}

Создайте свойство текущего объекта переменной с именем Идентификатор и значением, равным объекту Function, созданному следующим образом:

new Function(arg0, arg1, body)

Итак, вот почему вы не можете перегрузить функцию, потому что вы можете ' t имеют более одного свойства текущего объекта переменной с тем же именем

22
ответ дан 18 December 2019 в 05:31
поделиться

Есть другой способ - функция с любыми параметрами возвращает что угодно.

public function doSomething(...args):*{
    if(args.length==1){
        if(args[0] is String){
            return args[0] as String;
        }
        if(args[0] is Number){
            return args[0] as Number;
        }
    }
    if(args.length==2){
        if(args[0] is Number && args[1] is Number){
            return args[0]+args[1];
        }
    }

}
1
ответ дан 18 December 2019 в 05:31
поделиться

Стоит отметить, что перегрузка функций - это не идиома ООП, это соглашение языка . Языки ООП часто имеют поддержку перегрузки, но в этом нет необходимости.

Как отмечает lk, вы можете аппроксимировать это с помощью структуры, которую он показывает. В качестве альтернативы вы можете сделать следующее:

public function overloaded(mandatory1: Type, mandatory2: Type, ...rest): *;

Эта функция потребует первых двух аргументов, а затем передаст остальные в виде массива, который вы затем можете обрабатывать по мере необходимости. Вероятно, это более гибкий подход.

9
ответ дан 18 December 2019 в 05:31
поделиться

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

Причина, по которой этого не происходит, вероятно, в основном, время / возврат инвестиций для Adobe в разработку и написание языка.

1
ответ дан 18 December 2019 в 05:31
поделиться

Вероятно, потому что ActionScript ищет функции по имени во время выполнения, а не сохраняет их по имени и параметрам во время компиляции.

Эта функция упрощает добавление и удаление функций из динамических объектов , а также возможность получать и вызывать функции по имени с использованием объекта ['functionName'] () , но я полагаю, что это очень затрудняет реализацию перегрузки без нарушения этих функций.

1
ответ дан 18 December 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: