枚举值作为 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){}
}
更新: 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".
遗憾的是枚举不能用作默认值,因为在 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 可能适合您的情况。
有没有办法在 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){}
}
更新: 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".
遗憾的是枚举不能用作默认值,因为在 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 可能适合您的情况。