第二十章 ObjectScript - 潜在的缺陷

news2025/1/9 15:03:25

文章目录

  • 第二十章 ObjectScript - 潜在的缺陷

第二十章 ObjectScript - 潜在的缺陷

以下项目可能会让刚接触ObjectScript的程序员感到困惑,特别是那些负责维护其他程序员编写的代码的程序员:

  • 在例程或方法中,除非每行包含标签,否则每行必须至少缩进一个空格或一个制表符。也就是说,如果在第一个字符位置有任何类型的文本,编译器和IDE将其视为标签。

有一个例外:在第一个字符位置接受花括号。

命令和它的第一个参数之间必须有一个空格(不是制表符)。否则,你的IDE指示你有一个语法错误:

在这里插入图片描述

类似地,终端显示语法错误如下:

TESTNAMESPACE>write  5
 
WRITE  5
       ^
<SYNTAX>
TESTNAMESPACE>
  • ObjectScript中的运算符优先级严格从左到右;在表达式中,操作按照它们出现的顺序执行。可以在表达式中使用显式括号强制将某些操作置于其他操作之前。

通常,即使在不严格需要括号的地方也会使用括号。这样做对其他程序员(以后对你自己也是)很有用,因为它使你的代码的意图更清晰。

  • 由于历史原因,ObjectScript不认为空字符串("")等于ASCII NULL值。要表示ASCII NULL值,请使用$CHAR(0)。($CHAR是一个系统函数,它返回一个基于十进制的ASCII字符。) 例如:
 write "" = $char(0)

类似地,当ObjectScript值被映射为SQLXML时,值""$CHAR(0)被区别对待。

  • ObjectScript的某些部分区分大小写,而其他部分则不区分大小写。不区分大小写的条目包括命令名、函数名、特殊变量名、命名空间名和用户名。

区分大小写的项包括定义的大多数元素的名称:例程、变量、类、属性和方法。

  • 大多数命令名都可以用缩写形式表示。因此,WRITEwriteWriteWW都是WRITE命令的有效形式。
  • 对于许多命令,可以包含后置条件表达式(通常简称为后置条件)。

该表达式控制 IRIS是否执行该命令。如果后置条件表达式的计算结果为true(非零), IRIS将执行该命令。如果表达式的计算结果为false(零),IRIS将忽略该命令并继续执行下一个命令。

 Set count = 6
 Write:count<5 "Print this if count is less than five"
 Write:count>5 "Print this if count is greater than five"

前面的内容生成以下输出: 如果计数大于 5,则打印此内容

注意:如果后置条件对说是新的,可能会发现短语“后置条件表达式”有些误导,因为它(错误地)表明表达式在命令之后执行。尽管有这个名称,但后置条件是在命令之前执行的。

  • 可以在一行中包含多个命令。例如:
 set myval="hello world" write myval

执行此操作时,请注意,如果该行上还有其他命令,则必须在任何不带参数的命令后面使用两个空格;如果不这样做,就会出现语法错误。

  • IFELSEFORDO 命令有两种形式:

    • 一种较新的块形式,它使用花括号来指示块。例如:
     if (testvalue=1) {
     write "hello world"
    }
    

    ISC 建议在所有新代码中使用块形式。

    • 一种较旧的基于行的形式,不使用花括号。例如:
     if (testvalue=1) write "hello world" 
    
  • 由于前面的内容,ObjectScript 可以以非常紧凑的形式编写。例如:

 s:$g(%d(3))'="" %d(3)=$$fdN3(%d(3)) q 

类编译器自动生成上面所示形式的紧凑代码(尽管不一定像本示例中那样使用缩写命令)。有时,查看生成的代码、追踪问题的根源或了解某些内容的工作原理很有用。

  • ObjectScript 中没有真正的保留字,因此理论上可以有一个名为 set 的变量。然而,谨慎的做法是避免使用命令、函数、SQL 保留字和某些系统项的名称;
  • IRIS 分配固定数量的内存来保存字符串操作的结果。如果字符串表达式超出分配的空间量,则会产生 <MAXSTRING> 错误。

对于类定义,字符串操作限制会影响字符串属性的大小。 IRIS 提供了一个系统对象(称为流),当需要处理超出此限制的字符串时,可以使用它;在这种情况下,可以使用流接口类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/981975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

复制粘贴是怎么实现的

在上面的代码中&#xff0c;command 和 select 是自定义的函数。它们的作用如下&#xff1a; 实现复制粘贴的思路&#xff1a; 创建一个 textarea 标签将 textarea 移出可视区域给这个 textarea 赋值将这个 textarea 标签添加到页面中调用 textarea 的 select 方法调用 docum…

【PowerDesigner16】显示工具面板

1、点击左上角【工具】“toolbars”&#xff0c;然后【自定义工具栏】&#xff0c;选择“palette”即可显示工具栏。

MediaCodec源码分析 createByCodecName流程

前言 本文梳理MediaCodec初始化流程,即create流程,基于7.0代码。流程图如下,创建流程还是比较清晰简单的。 代码见: frameworks/base/media/java/android/media/MediaCodec.java frameworks/base/media/jni/android_media_MediaCodec.h frameworks/base/media/jni/androi…

源代码防泄密

IBM 发布年度《数据泄露成本报告》&#xff0c;显示 2023 年全球数据泄露平均成本达到 445 万美元&#xff0c;比过去 3 年增加了 15%。创下该报告的历史新高。 报告显示&#xff0c;企业在计划如何应对日益增长的数据泄露频率和成本方面存在分歧。研究发现&#xff0c;虽然 95…

Debian12系统下LAMP环境中Nubuilder4.5的安装

一、环境搭建 按照官方的说法&#xff0c;Apache2和Nginx都可以的&#xff0c;实际上&#xff0c;你最好直接按照 Mariadb\Apache2\Php8.2 这个顺序&#xff0c;搭建LAMP环境较好。不然各种调试&#xff0c;还不一定能够成功。 相关搭建方法&#xff0c;属于一般操作&#xf…

Python关键字(保留字)一览表

保留字是 Python 语言中一些已经被赋予特定意义的单词&#xff0c;这就要求开发者在开发程序时&#xff0c;不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。 Python 包含的保留字可以执行如下命令进行查看&#xff1a; >>> import keyword >…

刷题笔记16——数组的花式输出

华容道 听到面试的时候会问到华容道的问题&#xff0c;简单记录一下&#xff0c;也类似于迷宫问题&#xff0c;可以记录下空格地方所在的位置&#xff0c;华容道问题就类似于空格在整个数组中寻找一条路线&#xff08;无论我们如何移动小块&#xff0c;其实都是空格以一条路线…

ActiveReportsJs 账票印刷

参考资料 官方文档 一. HTML部分 在页面上添加了Loading效果&#xff0c;账票印刷开始时显示Loading效果&#xff0c;印刷结束后隐藏Loading效果。ar-js-core.js是核心文件ar-js-pdf.js用来印刷PDFar-js-xlsx.js用来印刷EXCELar-js-locales.js用来设置语言 <!DOCTYPE htm…

MySQL——数据类型以及对表结构的修改

MySQL的数据类型 刚才我们在创建表的时候&#xff0c;说到了一个字段类型&#xff0c;所谓的字段类型就是这个字段能存放的数据的数据类型&#xff0c;在MySQL中有以下几种数据类型&#xff1a; 数据类型 大小&#xff08;字节&#xff09; 用途 格式 INT 4 整数 FLOAT…

13 - 多线程之锁优化(中):深入了解Lock同步锁的优化方法

上一讲介绍了在 JVM 层实现的 Synchronized 同步锁的优化方法&#xff0c;除此之外&#xff0c;在 JDK1.5 之后&#xff0c;Java 还提供了 Lock 同步锁。那么它有什么优势呢&#xff1f; 相对于需要 JVM 隐式获取和释放锁的 Synchronized 同步锁&#xff0c;Lock 同步锁&#…

echarts legend如何控制标签文字长度

效果 代码&#xff0c;直接贴进去换掉就能测试 legend: {type: scroll,top: 10%,icon: circle,right: 5%,orient: vertical,formatter:(name)>{//下面三个值换一下就行let arr [{a| 科创团队 },{b| 10 个},{c| 100 %}]return arr.join( )},textStyle: { color: #C2…

java实现创建时间、修改时间自动生成

一、TbaleMetaObjectHandler package com.ybzx.zdbx.common.handler;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Compo…

一文了解Android App Bundle 格式文件

1. Android App Bundle 是什么&#xff1f; 从 2021 年 8 月起&#xff0c;新应用需要使用 Android App Bundle 才能在 Google Play 中发布。 Android App Bundle是一种发布格式&#xff0c;打包出来的格式为aab&#xff0c;而之前我们打包出来的格式为apk。编写完代码之后&a…

PowerDesginer提示打印机错误

PowerDesginer提示打印机错误 错误信息&#xff1a;在您可以执行与打印机有关的任务(例如页面设置或打印一个文档)之前,您必须已经安装打印机。您想现在安装打印机么&#xff1f; 运行 >services.msc> Print Spooler 启动服务

JSON是什么?认识 json

目录 一 Json定义 二 Json语法规则 三 json 的代码演示 一 Json定义 轻量级的文本数据交换格式具有自我描述性【看到某个Json数据就能知道它的特点】比xml传输速度快【跨平台】 二 Json语法规则 &#xff08;1&#xff09;语法 两种数据结构&#xff1a;对象和数组 大括号…

LGFormer:LOCAL TO GLOBAL TRANSFORMER FOR VIDEO BASED 3D HUMAN POSE ESTIMATION

基于视频的三维人体姿态估计的局部到全局Transformer 作者&#xff1a;马海峰 *&#xff0c;陆克 * †&#xff0c;薛健 *&#xff0c;牛泽海 *&#xff0c;高鹏程† * 中国科学院大学工程学院&#xff0c;北京100049 鹏程实验室&#xff0c;深圳518055 来源&#xff1a;202…

cartographer 学习

cartographer 学习 编译并运行代码 由于cartographer整体分成了两个包 一个是cartographer,不带ros的内容另一个是cartographer_ros&#xff0c;是已ros项目构建的 这样因为带了普通cmake的包&#xff0c;就没法使用catkin_make了&#xff0c;只能使用catkin_make_isolated …

Global mapper24.1最新中文版本教程以及安装包

Global mapper成为如此用户友好的数据编辑、分析等工具的部分原因是它如何处理已删除的要素。从撤消管理器到独立工作空间&#xff0c;已删除的功能并不总是消失。矢量特征以一种简单的方式&#xff0c;当您在需要时遇到它时几乎感觉像魔术一样&#xff0c;矢量特征存储在工作区…

【python基础知识】8.编程思维:如何解决问题-思维篇

文章目录 前言瓶颈1&#xff1a;知识学完就忘用法查询笔记深度理解笔记知识管理 瓶颈2&#xff1a;缺乏解题能力如何解题分析问题&#xff0c;明确结果思考需要的知识&#xff0c;或搜索新知识思考切入点尝试解决问题的一部分尝试重复1-4步 总结 前言 Hi&#xff0c;欢迎来到第…

three.js 纹理

默认情况下&#xff0c;您在 Three.js 中渲染的所有内容都会发送到屏幕上。毕竟&#xff0c;如果你看不到它&#xff0c;渲染它有什么意义呢&#xff1f;事实证明&#xff0c;有一个非常重要的点&#xff1a;在数据发送到屏幕&#xff08;从而丢失&#xff09;之前捕获数据。 …