0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Classes -方法参数

科技绿洲 来源:技术理科直男 作者:技术理科直男 2023-09-20 14:27 次阅读

方法参数

方法可以在逗号分隔的列表中接受位置参数。对于每个参数,可以指定类型和默认值。

例如,下面是一个接受三个参数的方法的部分定义。这对IRIS类中的ObjectScriptPython方法都是有效的语法:

Method Calculate(count As %Integer, name, state As %String = "CA") as %Numeric
{
    // ...
}

注意,其中两个参数具有显式类型,一个参数具有默认值。通常,显式指定每个参数的类型是个好主意。

注意:如果一个方法是在Python中定义的,并且有任何带有默认值的参数,那么这些参数必须位于参数列表的末尾,以避免编译错误。

跳过参数

调用方法时,如果有合适的默认值,可以跳过参数。ObjectScriptPython都有自己的语法来跳过参数。

在ObjectScript中,可以通过不为参数提供值并保持逗号结构来跳过该参数。例如:

set myval=##class(mypackage.myclass).GetValue(,,,,,,4)

IRIS类中,Python方法的签名必须首先列出所需的参数,然后是具有默认值的任何参数。

调用方法时,必须按照方法签名的顺序提供参数。因此,一旦你跳过了一个参数,你也必须跳过它后面的所有参数。例如:

ClassMethod Skip(a1, a2 As %Integer = 2, a3 As %Integer = 3) [ Language = python ]
{
    print(a1, a2, a3)
}
TESTNAMESPACE >do ##class(mypackage.myclass).Skip(1)
1 2 3

通过值或引用传递变量

当调用一个方法时,可以通过值或引用将变量的值传递给该方法。

方法的签名通常表明是否打算通过引用传递参数。例如:

Method MyMethod(argument1, ByRef argument2, Output argument3)

ByRef关键字指示应该通过引用传递此参数。Output关键字指示应该通过引用传递此参数,并且该方法忽略最初给此参数的任何值。

类似地,当定义一个方法时,可以在方法签名中使用ByRefOutput关键字来通知其他用户该方法的使用方式。

要在ObjectScript中通过引用传递参数,请在调用方法时在变量名之前放置一个句号。在Python中,对要传递的值使用iris.ref(),并在引用上调用该方法。这两个都显示在下面的例子中:

Do MyMethod(arg1, .arg2, .arg3)
arg2=iris.ref("peanut butter")
arg3=iris.ref("jelly")
MyMethod(arg1,arg2,arg3)

重要信息ByRefOutput 关键字提供的信息对于使用 类引用的任何人都有利。它们不影响代码的行为。方法的编写者有责任强制执行有关如何调用该方法的任何规则。

可变数量的参数

可以定义一个方法,使其接受可变数量的参数。例如:

ClassMethod MultiArg(Arg1... As %List) [ Language = objectscript ]
{
 Set args = $GET(Arg1, 0)
 Write "Invocation has ",
     args,
     " element",
     $SELECT((args=1):"", 1:"s"), !
 For i = 1 : 1 : args
 {
     Write "Argument[", i , "]: ", $GET(Arg1(i), "< NULL >"), !
 }
}
ClassMethod MultiArg(Arg1... As %List) [ Language = Python ]
{
    print("Invocation has", len(Arg1), "elements")
    for i in range(len(Arg1)):
        print("Argument[" + str(i+1) + "]: " + Arg1[i])
}

指定默认值

要在 ObjectScriptPython 方法中指定参数的默认值,请使用以下示例中所示的语法:

Method Test(flag As %Integer = 0)
{
 //method details
}

调用方法时,它会对任何缺少的参数使用其默认值(如果指定)。如果方法是用 Python 编写的,则任何具有默认值的参数都必须在参数列表的末尾定义。

ObjectScript 中,另一个选项是使用 $GET 函数设置默认值。例如:

Method Test(flag As %Integer)
{
  set flag=$GET(flag,0)
 //method details
}

但是,这种技术不会影响类签名。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 参数
    +关注

    关注

    11

    文章

    1784

    浏览量

    32086
  • 代码
    +关注

    关注

    30

    文章

    4744

    浏览量

    68344
  • 编译
    +关注

    关注

    0

    文章

    653

    浏览量

    32806
收藏 人收藏

    评论

    相关推荐

    PID参数的意义与整定方法

    PID参数的意义与整定方法资料
    发表于 07-31 09:17

    极大似然参数辨识方法

    极大似然参数辨识方法.ppt
    发表于 08-13 15:51

    最小二乘参数辨识方法及原理

    最小二乘参数辨识方法及原理.ppt
    发表于 08-13 15:54

    AD解决ADD Component Classes出错的解决方法

    解决ADD Component Classes出错的问题。提示是Failed to add class member:xxx 和 Unknown Pin
    发表于 07-05 08:30

    Altium解决Failed to add class member 问题的方法

    我们设计时,在导入PCB时有时候会出现Failed to add class member 的错误提示;解决方法如下:1. 在PCB界面 design–classes; 2.Component Classes删掉出现问题的
    发表于 10-08 14:04

    请问电机参数的含义及测量方法是什么?

    请问电机参数的含义及测量方法是什么?
    发表于 10-19 08:54

    PID参数的基本调试方法是什么?

    PID参数的基本调试方法是什么?
    发表于 11-15 07:01

    PID温度控制参数整定的方法是什么

    PID温度控制参数整定的方法是什么?
    发表于 11-22 06:13

    电阻的型号命名方法,分类,主要特性参数

    电阻的型号命名方法,分类,主要特性参数
    发表于 06-30 19:31 2797次阅读

    PID参数的确定方法

    下面介绍的方法,包括着眼于使系统闭环极点落在希望的位置,依靠解析的方法确定PID参数;以及针对复杂的受控对象数学模型,借助于实验的方法确定PID参数
    发表于 04-28 15:57 0次下载

    PID参数整定方法的研究

    PID参数整定方法的研究-2009,下来看看。
    发表于 03-31 17:01 20次下载

    永磁同步电机控制参数设计方法

    永磁同步电机控制参数设计方法_邱腾飞
    发表于 01-05 15:34 22次下载

    java方法参数传递简析

    问:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 答:是值传递。Java 编程语言只有值传递参数。当一个对
    发表于 09-27 17:03 0次下载
    java<b class='flag-5'>方法</b><b class='flag-5'>参数</b>传递简析

    TVS参数及选型方法pdf下载

    TVS参数及选型方法
    发表于 01-24 16:43 35次下载

    参数域边界平直化的模型表面参数方法

    为了支持简化模型纹理边界、满足模型简化中纹理映射需求,提出了一种参数域边界平直化的模型表面参数方法。给出了由变换能量、防翻转能量和稀疏能量组成的能量方程。求解时引λ辅助变量并求得近似解。实验中分
    发表于 04-27 14:19 7次下载
    <b class='flag-5'>参数</b>域边界平直化的模型表面<b class='flag-5'>参数</b>化<b class='flag-5'>方法</b>