首页
学习
活动
专区
圈层
工具
发布

Haxe常数
EN

Stack Overflow用户
提问于 2014-08-21 10:40:06
回答 2查看 7.7K关注 0票数 10

如何在Haxe中创建公共常量?我只需要在AS3中使用好的老式AS3的模拟:

代码语言:javascript
复制
public class Hello
{
     public static const HEY:String = "hey";
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-21 10:49:42

在Haxe中声明常量的通常方法是使用staticinline修饰符。

代码语言:javascript
复制
class Main {
    public static inline var Constant = 1;

    static function main() {
        trace(Constant);
        trace(Test.Constant);
    }
}

如果您有一组相关常量,那么使用enum abstract通常是有意义的。枚举摘要的值是隐式的staticinline

请注意,只有基本类型(IntFloatBool)和String被允许为inline,对于其他类型,如果出现此错误,则会失败:

内联变量初始化必须是一个常量。

幸运的是,Haxe 4引入了一个final关键字,该关键字对于这种情况非常有用:

代码语言:javascript
复制
public static final Regex = ~/regex/;

但是,final只阻止重新分配,它不会使类型不可变。因此,仍然可以从类似static final Values = [1, 2, 3];的内容中添加或删除值。

对于数组的具体情况,Haxe 4引入了haxe.ds.ReadOnlyArray,它允许“常量”列表(假设您不使用强制转换或反射操作):

代码语言:javascript
复制
public static final Values:haxe.ds.ReadOnlyArray<Int> = [1, 2, 3];
代码语言:javascript
复制
Values = []; // Cannot access field or identifier Values for writing
Values.push(0); // haxe.ds.ReadOnlyArray<Int> has no field push

尽管这是一个特定于数组的解决方案,但同样的方法也可以应用于其他类型。ReadOnlyArray<T>只是一个通过执行以下操作创建只读“视图”的抽象类型

  • 它封装了Array<T>
  • 它使用@:forward只公开不改变数组的字段,例如lengthmap()
  • 它允许隐式铸型 from Array<T>

您可以看到它是如何实现这里的。

票数 24
EN

Stack Overflow用户

发布于 2014-11-13 10:38:26

对于非静态变量和对象,您可以给它们简单的一致性,如下所示:

代码语言:javascript
复制
public var MAX_COUNT(default, never):Int = 100;

这意味着您可以以“默认”的方式读取值,但不能“永远”写入该值。

更多信息可以找到http://adireddy.github.io/haxe/keywords/never-inline-keywords

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25424247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档