Merge命令

简介: Merge命令

New命令

支持以下语法形式:

NEW          // 为所有局部变量启动新上下文
 NEW x        // 为指定的局部变量启动新上下文
 NEW x,y,z    // 为列出的局部变量启动新上下文
 NEW (y)      // 为除指定变量之外的所有局部变量启动新上下文
 NEW (y,z)    // 为除列出的变量之外的所有局部变量启动新上下文
复制代码

NEW命令不能用于以下内容:

  • Globals 全局变量
  • Process-Private Globals 私有进程全局变量
  • Local variable subscripts 局部变量下标
  • 特殊变量,$ESTACK$ETRAP$NAMESPACE$ROLES除外

在这些上下文中使用NEW都会报<SYNTAX>错误。

  • 在程序中也就是类程序中,默认都是私有变量不能NEW。如果要使用NEW命令需要在类添加关键字Not ProcedureBlock
Class XX Extends %RegisteredObject [Not ProcedureBlock]
{
}
复制代码
  • 无参数new,初始化所有变量。
ClassMethod New()
{
  s a = 1, b = 2, c = 3, d = 4, e = 5
  w !,"NEW之前:",!
  zw
  n 
  w !,"NEW之后:",!
  zw
  q ""
}
复制代码
  • 带参数new,只初始化列表里的变量。
ClassMethod New1()
{
  s a = 1, b = 2, c = 3, d = 4, e = 5
  w !,"NEW之前:",!
  zw
  n d,e
  w !,"NEW之后:",!
  zw
  q ""
}
复制代码
  • 独占new,替换本地变量环境中除指定变量之外的所有现有变量。除了括号里的变量其他变量都初始化。
ClassMethod New2()
{
  s a = 1, b = 2, c = 3, d = 4, e = 5
  w !,"NEW之前:",!
  zw
  n (d,e)
  w !,"NEW之后:",!
  zw
  q ""
}
复制代码
  • 独占NEW最多可以指定255个变量作为逗号分隔的列表。 超过此数字Caché发出<SYNTAX>错误。
  • 尝试发出超过31个级别的独占NEW或无参数NEW会导致<MAXSCOPE>错误。
ClassMethod New3()
{
  for i = 1 : 1 : 32 {
    w i, !
    n (i)
  }
  q ""
}
复制代码

Merge命令

将全局变量或多维数组节点并到目标变量。

  • MERGE将数据源复制到目标变量,并将数据源的所有后代复制到目标的后代。它不修改数据源,也不终止目标中的任何节点。MERGE 简化了将变量的子树(多个下标)复制到另一个变量的过程。这两个变量都可以是带下标的局部变量、进程私有全局变量或全局变量。子树是指定变量的后代的所有变量。
  • Merge为当前的节点复制技术提供了命令替代方案:带有$ORDER引用的SET命令。
/// d ##class(YX.M16).Merge()
ClassMethod Merge()
{
  k ^a,^b
  s ^a="cartoons"
  s ^a(1)="The Flintstones",^a(2)="The Simpsons"
  s ^a(1, 1)="characters",^a(1, 2)="place names"
  s ^a(1, 1, 1)="Flintstone family"
  s ^a(1, 1, 1, 1)="Fred"
  s ^a(1, 1, 1, 2)="Wilma"
  s ^a(1, 1, 2)="Rubble family"
  s ^a(1, 1, 2, 1)="Barney"
  s ^a(1, 1, 2, 2)="Betty"
  m ^b = ^a(1,1)
  zw ^b
}
复制代码

假设如图^X^Y的初始结构

MERGE ^X(2,3)=^Y(3,6,7,8)
复制代码

发出以上语句时,Caché会将^Y的一部分复制到^X(2,3)中。现在,全局变量^X的结构如下图所示。

Merge命令的^X^Y的结果

ClassMethod Merge1()
{
  k ^X,^Y
  s ^X(2,2)="first"
  s ^X(2,2,4)="second"
  s ^Y(3,6,7)="third"
  s ^Y(3,6,8)="fourth"
  s ^Y(3,6,7,8,4)="fifth"
  s ^Y(3,6,7,8,9)="sixth"
  merge ^X(2,3)=^Y(3,6,7,8)
  zw ^X
  zw ^Y
}


相关文章
|
4月前
|
开发工具 git
合并commit
合并commit
35 0
|
5月前
|
开发工具 git
You have not concluded your merge (MERGE_HEAD exists)
You have not concluded your merge (MERGE_HEAD exists)
|
8月前
|
开发工具 git
git报错,error: You have not concluded your merge (MERGE_HEAD exists). hint: Please,
git报错,error: You have not concluded your merge (MERGE_HEAD exists). hint: Please,
87 0
|
自然语言处理
SVN合并(Merge)与拉取分支(Branch/tag)操作简介
SVN合并(Merge)与拉取分支(Branch/tag)操作简介
467 0
|
开发工具 git
Git——合并(merge)
本文主要介绍 git merge的使用方式
281 0
Git——合并(merge)
|
数据库 开发者 索引
merge 操作|学习笔记
快速学习 merge 操作
172 0
merge 操作|学习笔记
|
开发工具 git
git merge用法
git merge用法
167 0
|
开发工具 git
Git合并分支出现 Please enter a commit message to explain why this merge is necessary.
Git合并分支出现 Please enter a commit message to explain why this merge is necessary.
2482 0
Git合并分支出现 Please enter a commit message to explain why this merge is necessary.
|
存储 开发工具
svn merge
svn merge 命令的使用 merge是干啥的呢? 使用过SVN都知道SVN其实就是一个代码管理的软件,使用它可以很好的解决代码冲突。他可以针对一个文件产生不同的版本,每一个版本都对应自身的改动。
1636 0