使用不完整的模式

简介: 使用不完整的模式

使用不完整的模式

  • 如果模式匹配成功地仅匹配了字符串的一部分,则模式匹配将返回FALSE(0)结果。也就是说,当模式完成时不能有任何剩余的字符串。
s str = "RAW BAR"
  s match = str ? .U1P2U
  w match,!
  s str = "RAW BAR"
  s match = str ? .U1P3U
  w match,!
  s str = "RAW BAR"
  s match = str ? .U1P4U
  w match,!
复制代码
  • 当模式与操作数匹配时,可以有多个模式解释。
s str = "/A#####B$$$$$"
  s match = str ? .E1U.E
  w match,!
复制代码
  1. 第一个“.E”匹配子字符串“/”1U匹配“A”,第二个“.E”匹配子字符串“#####B$$$$$”
  2. 第一个“.E”匹配子字符串“/A#####”1U匹配字符“B”,第二个“.E”匹配子字符串“$$$$$”

不匹配运算符

  • 可以通过将一元NOT运算符(')与模式匹配一起使用来生成不匹配操作:
w !,"abc" ? 3L
  w !,"abc" '? 3L
  w !,"abc" ? 3N
  w !,"abc" '? 3N
  w !,"abc" '? 3E
复制代码

模式复杂性

注意:具有多个交替和不确定模式的模式匹配在应用于长字符串时,会递归到系统堆栈中的多个级别。在极少数情况下,这种递归可能会上升到几千个级别,从而威胁到堆栈溢出和进程崩溃。当这种极端情况发生时,Caché会发出<Complex Pattern>错误,而不是冒当前进程崩溃的风险。

如果出现此类错误,建议简化模式,负责的模式则不应该使用模式匹配。

间接寻址

间接操作符(@)允许间接为变量赋值。间接寻址是一种通过数据字段的内容提供部分或全部命令行、命令或命令参数的动态运行时替换的技术。Caché在执行相关命令之前执行替换。

尽管与其他方式相比,间接寻址方式可以更高效更通用的编码,但不是必需的。可以通过XECUTE命令达到间接寻址的效果。

只有在明显优势的情况下才应该使用间接寻址。间接寻址可能会影响性能,因为Caché在运行时而不是在编译阶段执行所需的求值。此外,如果使用复杂的间接寻址,应确保清楚的代码逻辑。间接寻址有时很难理解。

注意:在类中使用标签或例程间接寻址时要指定Not ProcedureBlock

间接寻址由间接运算符(@)指定。

@variable
复制代码

其中variable标识要从中获取替换值的变量。变量可以是数组节点。

ClassMethod Indirection()
{
  s x = "A"
  s x(1) = "B"
  d @x(1)
  q
A(var)
  w !,"A"
  q
B(var)
  w !,"B"
  q
}


相关文章
|
17小时前
|
设计模式 运维 安全
边车模式的介绍
边车模式的介绍
12 0
|
17小时前
|
设计模式 算法 编译器
【C/C++ PIMPL模式 】 深入探索C++中的PIMPL模式
【C/C++ PIMPL模式 】 深入探索C++中的PIMPL模式
55 0
|
17小时前
|
算法 数据中心
|
17小时前
一般模式
【2月更文挑战第20天】一般模式。
10 1
|
前端开发 JavaScript Java
MVX模式是什么?
MVX模式是什么?
228 0
|
分布式计算 自然语言处理 并行计算
运用Aggregator模式实现MapReduc
运用Aggregator模式实现MapReduc
运用Aggregator模式实现MapReduc
|
C语言
模式
模式
115 0
|
前端开发 JavaScript 编译器
模式二之框架模式
模式二之框架模式
|
并行计算 搜索推荐 算法