第十八章 开发Productions - ObjectScript Productions - 通过引用或作为输出传递值
- 如果不熟悉通过引用或输出传递值,本节旨在引导了解这种做法。
许多 IRIS
方法至少返回两个值:状态 %Status
实例)和响应消息或其他返回值。通常,响应消息通过引用或作为输出返回。如果一个值通过引用或作为输出返回,这意味着:
- 当定义方法时,方法必须设置相应的变量。
- 当调用该方法时,必须在相应的参数之前包含一个句点。
以下示例演示了这些要点。
典型的回调方法
method OnRequest(request As %Library.Persistent, Output response As %Library.Persistent) as %Status
关键字 Output
表示第二个参数将作为输出返回。在此方法的实现中,需要执行以下任务才能满足方法签名:
- 将名为
response
的变量设置为适当的值。当方法完成执行时,此变量必须具有值。 - 以
Quit
命令结束,后跟引用%Status
实例的变量名称。
例如:
Method OnRequest(request As %Library.Persistent, Output response As %Library.Persistent) as %Status
{
//other stuff
set response=myObject
set pSC=..MyMethod() ; returns a status code
quit pSC
}
注意:当设置响应等于请求时,一定要使用 %ConstructClone
。否则,请求对象将在您操作响应时更改,从而为提供发送到业务组件的消息的不准确记录。例如,如果要设置对请求的响应,请输入:
Method OnRequest(request As %Library.Persistent, Output response As %Library.Persistent) as %Status
{
set response=request.%ConstructClone()
// manipulate response without affecting the request object
}
此示例讨论作为输出返回的值,但对于通过引用传递的值,详细信息是相同的。
典型的辅助方法
下面显示了一个典型的继承辅助方法的签名:
method SendRequestSync(pTargetDispatchName As %String,
pRequest As %Library.Persistent,
ByRef pResponse As %Library.Persistent,
pTimeout As %Numeric = -1,
pDescription As %String = "") as %Status
关键字 ByRef 表示第三个参数将通过引用返回。要调用此方法,将使用以下内容:
set sc=##class(pkg.class).SendRequestSync(target,request,.response,timeout,description).
注意第三个参数之前的句号。
此示例讨论通过引用传递的值,但作为输出返回的值的详细信息相同。
网友评论