• 第二十五章 Classes - 基于数据类型的属性


    第二十五章 Classes - 基于数据类型的属性

    基于数据类型的属性

    定义属性并将其类型指定为数据类型类时,可以使用特殊选项来定义和使用该属性,如本节中所述。

    数据类型类

    数据类型类使能够强制执行有关属性值的规则集。

    IRIS 提供的数据类型类包括 %Library.String%Library.Integer%Library.Numeric%Library.Date等等。因为 %Library 包的类名可以缩写,所以可以缩写其中的许多类;例如, %Date%Library.Date的缩写。

    每个数据类型类都具有以下特征:

    • 它指定编译器关键字的值。对于属性,编译器关键字可以执行以下操作:

      • 使属性成为必需的
      • 指定属性的初始值
      • 控制如何将属性映射到 SQLODBCJava 客户端
    • 它指定影响细节的参数值,如下所示:

      • 数据类型允许的最大和最小逻辑值
      • 字符串可以包含的最大和最小字符数
      • 小数点后的位数
      • 如果字符串超过最大字符数是否截断
      • 显示格式
      • 如何转义任何特殊的 XMLHTML 字符
      • 可在任何用户界面中使用的逻辑值和显示值的枚举列表
      • 字符串必须匹配的模式(自动使用模式匹配运算符)
      • 导入或导出到 XML 时是否尊重或忽略 UTC 时区
    • 它提供了一组方法来在存储(磁盘上)、逻辑(内存中)和显示格式之间转换文字数据。

    可以添加自己的数据类型类。例如,以下显示了 %Library.String的自定义子类:

    Class MyApp.MyType Extends %Library.String
    {
    
    /// The maximum number of characters the string can contain.
    Parameter MAXLEN As INTEGER = 2000;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    覆盖数据类型类的参数

    当定义属性并将其类型指定为数据类型类时,可以覆盖该数据类型类定义的任何参数。

    例如,数据类型类中的 %Integer 定义了类参数 (MAXVAL),但没有为此参数提供任何值。可以在属性定义中覆盖它,如下所示:

    Property MyInteger As %Integer(MAXVAL=10);
    
    • 1

    对于此属性,最大允许值为 10

    (在内部,这是有效的,因为数据类型类的验证方法是方法生成器;当编译器为类生成代码时,将使用提供的参数值。

    同样,每个 %String 类型的属性都有一个排序规则类型,它确定值的排序方式(例如大小写是否有效)。默认排序规则类型是 SQLUPPER

    再例如,数据类型类定义 DISPLAYLISTVALUELIST 参数,可以使用它们来指定要在用户界面中显示的选项及其相应的内部值:

    Property Gender As %String(DISPLAYLIST = ",Female,Male", VALUELIST = ",F,M");
    
    • 1

    使用其他属性方法

    属性有许多自动关联的方法。这些方法由数据类型类生成,可以从 ObjectScript 访问。

    例如,如果定义一个具有三个属性的类 Person

    Class MyApp.Person Extends %Persistent
    {
    Property Name As %String;
    Property Age As %Integer;
    Property DOB As %Date;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    每个生成的方法的名称都是属性名称与继承类中的方法名称相连接。可以从 ObjectScript 访问这些生成的方法,如下例所示。可以通过直接从继承的类调用关联的方法来从 Python 访问相同的信息。例如,类中的 %Date 以及 DOB 属性关联的一些方法是:

     Set x = person.DOBIsValid(person.DOB)
     Write person.DOBLogicalToDisplay(person.DOB)
    
    • 1
    • 2
    x = iris.cls("%Date").IsValid(person.DOB)
    print(iris.cls("%Date").LogicalToDisplay(person.DOB))
    
    • 1
    • 2

    其中 IsValid 是属性类的方法,LogicalToDisplay 是数据类型类中 %Date的方法。

  • 相关阅读:
    C++学习日记:关于我决定开始学习C++的那些事
    【初识 Docker | 基础篇】 Docker 镜像
    医学分析专业名词解释
    web前端期末大作业:美食网站设计与实现——HTML+CSS+JavaScript休闲美食餐饮公司网站静态模板(6个页面)
    关系抽取:传统:UniRel: Unified Representation and Interaction for Joint Relational
    ensp里面做路由引入
    npm install报 ERESOLVE unable to resolve dependency tree
    vue自定义指令
    多臂老虎机
    判断完数(C语言)
  • 原文地址:https://blog.csdn.net/yaoxin521123/article/details/132822663