如何在Objectscript中设置变量为null



c#i可以做:

object foo = null;

如何在对象脚本中执行此操作?

对于简单变量,没有办法设置变量以具有未定义的值。由于缓存对象脚本的键入松散,因此不必为null设置对象引用,因此更改对其他内容的参考值,最常见的字符串,垃圾收集器将清理对象没有主动参考。

出于所有实际目的,将该变量设置为空字符串"就足够了。如果没有,您可以在问题上扩展吗?

缓存对象脚本中的对象属性永远不会解析为未定义的值。如果该值不确定(因为它具有null的SQL值或从未分配了值),则该属性将解析为空字符串的值。如果您希望该属性包含NULL的SQL表示形式,则可以在与该对象相对应的行上进行SQL插入或更新,并将字段设置为NULL。如果将对象的属性设置为空字符串并保存它,则该对象的SQL行将不为空字符串,但将具有空字符串。

基本上,在对象视图中实际上没有对null的抽象表示。SQL null有序列化值,可以在SQL视图中解析为null,而对象视图中的空字符串。

顺便说一句,sql视图中null的序列化值是空字符串,并且空字符串的序列化值为ascii0。

从内存和垃圾收集引用对象擦除变量,您可以使用 kill命令

Method Test() {
  set foo=##class(Obj).%New()
  // created object of class Obj. created variable foo pointing to this object.
  // do something
  set foo=""
  // Object of class Obj is now marked for garbage collection 
  // but variable foo still exist
  // do something else
  kill foo
  // foo is now undefined
  // do something else
}

但是,如果您使用ProcedureBlock方法(在新的缓存版本中默认为默认值)或new命令,则无需。在这种情况下,所有对象引用和变量将在您的方法完成后自动破坏

Method Test() {
  set foo=##class(Obj).%New()
  // created object of class Obj. created variable foo pointing to this object.
  // do something
}
// after method finishes, foo is undefined and object of class Obj is destroyed

如果您只想声明该变量为某些类型,则可以使用#DIM指令。它无能为力,只能帮助工作室确定变量类。有时,如果Studio无法确定课程本身,并且您想使用其内联助手。

Method Test() {
  #dim foo as Obj
  do ##class(Obj).GenerateSomething(.foo)
  write foo.Property 
  // Studio will provide helper bar for foo properties and methods now
}

所选解决方案绝对不准确。如果您想如示例中所述,将变量设置为null,则如SSH所述。您将:

K VARIABLE

KILL VARIABLE

相关内容

  • 没有找到相关文章

最新更新