caching - 在 Intersystems Caché 中使用 ENUM 的最佳实践是什么?

标签 caching enums intersystems-cache intersystems

例如,当您需要在 Java 中实现类似以下示例的解决方案时,Caché 本身不会实现 Java 等 ENUM,但在 Caché 中,最佳实践是什么?

public enum Planet {
    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6),
    MARS    (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27,   7.1492e7),
    SATURN  (5.688e+26, 6.0268e7),
    URANUS  (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7);

    private final double mass;   // in kilograms
    private final double radius; // in meters
    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    } 
    private double mass() { return mass; }
    private double radius() { return radius; }
}

final Planet mars = Planet.MARS;

访问代码就像Planet.MARS

最佳答案

可计算参数的例子

Class so.Enum Extends %RegisteredObject
{

Parameter MERCURY As COSEXPRESSION = "..%New(3.303e+23, 2.4397e6)";

Parameter VENUS As COSEXPRESSION = "..%New(4.869e+24, 6.0518e6)";

Parameter EARTH As COSEXPRESSION = "..%New(5.976e+24, 6.37814e6)";

Parameter MARS As COSEXPRESSION = "..%New(6.421e+23, 3.3972e6)";

Parameter JUPITER As COSEXPRESSION = "..%New(1.9e+27,   7.1492e7)";

Parameter SATURN As COSEXPRESSION = "..%New(5.688e+26, 6.0268e7)";

Parameter URANUS As COSEXPRESSION = "..%New(8.686e+25, 2.5559e7)";

Parameter NEPTUNE As COSEXPRESSION = "..%New(1.024e+26, 2.4746e7)";

Property Mass As %Double;

Property Radius As %Double;

Method %OnNew(mass, radius) As %Status
{
    set ..Mass=mass
    set ..Radius=radius
    quit $$$OK
}

}

而且,你可以这样使用它

USER>w ##class(so.Enum).#MERCURY.Mass
330300000000000000000000
USER>w ##class(so.Enum).#MERCURY.Radius
2439700
USER>w ##class(so.Enum).#MERCURY.Radius
2439700
USER>w ##class(so.Enum).#EARTH.Radius
6378140
USER>w ##class(so.Enum).#EARTH
1@so.Enum
USER>w ##class(so.Enum).#MERCURY
1@so.Enum

你可以将它定义为一个宏

#define MERCURY ##class(so.Enum).#MERCURY

#define Planet(%planet) $parameter("so.Enum",$zcvt("%planet","U"))

关于caching - 在 Intersystems Caché 中使用 ENUM 的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32529941/

相关文章:

javascript - PhoneGap 禁用缓存

java - 如何在枚举中调用附加方法?

sql - 如何获取系统间缓存中的模式列表?

Java Hibernate JPA 删除 OneToMany 关系和 MapKeyJoinColumn 关系对象

jquery - 从 iPhone 主屏幕重新打开时,如何在 jQuery Mobile 应用程序上缓存和保留上次访问的页面?

java - 确定 Hazelcast 缓存使用的内存

c# - 当此信息与对象参数一起传递时,为什么 Enum.GetName() 要求类型?

java - Proguard 不会保留类(class)成员的枚举

sql - 最早的记录差异?

sql - 在静态项目列表上左加入?