ByRef和Output方法参数修饰符之间有什么区别?

时间:2016-02-16 02:45:30

标签: intersystems-cache objectscript

所有这些都在主题中,真的。

我没有看到x的两种方法之间的行为差​​异:

// first version
Method m(ByRef x As whatever)
{
    // play with x
}

// second version
Method m(Output x As whatever)
{
    // play with x
}

为什么这两个修饰语都存在,必定有一些原因,但是我对语言的“掌握”(嗯)不足以理解其中的差异。我已经尝试过阅读文档,搜索文档等,到目前为止无济于事。

那么,这两个参数修饰符之间的区别是什么?

1 个答案:

答案 0 :(得分:7)

那些只是“美化”,它们在实际语言行为方面做得不多,而且只用于提供文档。想法是记录为ByRef的参数提供输入和输出,例如,您可以传递要排序的数组,并且Output参数仅提供输出,例如错误列表。输出修饰符稍后介绍,许多系统代码仍然使用ByRef用于两种用例。

如果参数实际通过引用传递,则仅由方法调用者确定,并且关键字并不重要。您将方法调用为..m(.parameter)以通过引用传递变量,并..m(parameter)按值传递变量。