【问题标题】:Enum values as parameter default values in Haxe枚举值作为 Haxe 中的参数默认值
【发布时间】:2015-07-09 04:11:58
【问题描述】:

有没有办法在 Haxe 中使用enum 默认参数?我收到此错误:

参数默认值应该是常数

enum AnEnum {
    A;
    B;
    C;
}

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

Try Haxe link.

【问题讨论】:

    标签: enums haxe


    【解决方案1】:

    更新: 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

    【讨论】:

      【解决方案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;
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 1970-01-01
        • 2016-10-10
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 2015-08-22
        相关资源
        最近更新 更多