2015-07-09 4 views
4

Есть ли способ использования enum параметров по умолчанию в Haxe?Параметры по умолчанию Haxe Enum

Я получаю ошибку Parameter default value should be constant

enum AnEnum { 
    A; 
    B; 
    C; 
} 

class Test { 
    static function main() { 
     Test.enumNotWorking(); 
    } 
    static function enumNotWorking(?e:AnEnum = AnEnum.A){} 
} 

Попробуйте Haxe link

ответ

3

Существует, если вы готовы использовать перечисления тезисов (перечисления во время компиляции, но другой типа во время выполнения):

@:enum 
abstract AnEnum(Int) 
{ 
    var A = 1; 
    var B = 2; 
    var C = 3; 
} 

class Test3 
{ 
    static function main() 
    { 
     nowItWorks(); 
    } 

    static function nowItWorks(?param=AnEnum.A) 
    { 
     trace(param); 
    } 
} 

Нет ничего особенного в значениях, которые я выбрал, и вы можете выбрать другой тип (строку или более сложный тип), если он лучше подходит для вас e случай. Вы можете рассматривать их так же, как обычные перечисления (для операторов switch и т. Д.), Но обратите внимание, что когда вы отслеживаете его во время выполнения, вы получите «1», а не «A».

Дополнительная информация: http://haxe.org/manual/types-abstract-enum.html

2

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

Этот кусок мелочи был на старом сайте, но, видимо, не сделал его в новое руководство еще:

http://old.haxe.org/ref/enums#using-enums-as-default-value-for-parameters

Чтобы обойти эту проблему, чтобы проверить нулевое значение в начале вашей функции :

static function enumNotWorking(?e:AnEnum){ 
    if (e==null) e=AnEnum.A; 
} 

в качестве альтернативы, Abstract Enum может работать для вашего дела.