枚举值作为 Haxe 中的参数默认值

Enum values as parameter default values in 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){}
}

Try Haxe link.

更新: this feature has been added in Haxe 4。问题中的代码示例现在使用常规 enum.

按原样编译

以前,这只有在您愿意使用枚举抽象(编译时枚举,但运行时不同类型)时才有可能:

@: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);
    }
}

我选择的值没有什么特别之处,如果它更适合您的用例,您可以选择其他类型(字符串或更复杂的类型)。您可以像对待常规枚举一样对待它们(用于 switch 语句等),但请注意,当您在运行时跟踪它时,您将得到“1”,而不是 "A".

更多信息:http://haxe.org/manual/types-abstract-enum.html

遗憾的是枚举不能用作默认值,因为在 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;
}

或者,Enum Abstract 可能适合您的情况。