- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个程序
f:=proc(x,option1,option2) ... end proc;
在我的例子中,option1
总是一个整数,option2
是一个列表或其他东西(包括整数)。这两个选项都是可选的,因此这些命令按预期工作:
f(x);
f(x,3);
f(x,4,[1,2]);
f(x,5,3);
f(x,6,expand);
但是如果没有指定 option1
那么我不知道一个简单的方法来处理它,因为 Maple 不允许这样的用法
f(x,,3);
f(x,,[1,2]);
我可以让它明白
f(x,[1,2]);
但我还是有问题
f(x,3);
因为不清楚 3
是 option1
还是 option2
。我可以重写代码以理解这种格式的函数调用
f(x,[1,option1],[2,option2]);
f(x,[1,option1]);
f(x,[2,option2]);
但我很好奇是否有更简单的方法来实现这一点,因为对于某些 Maple 函数(如 plot
),大多数选项的顺序无关紧要。
最佳答案
正如其他人已经提到的,一种解决方案是使用“kwarg”(关键字参数)。您还可以使用 _passed
或 _rest
。您可以在 Maple 帮助页面或 Maple 编程指南 (https://www.maplesoft.com/documentation_center/Maple2021/ProgrammingGuide.pdf) 中阅读更多内容。
这只是一个如何使用它们的示例。 _passed
用于当您想说出传递给您的过程的任何内容时,_rest
用于传递给您的过程的任何内容,除了已经分配的那些到您在 proc
前面的括号内提到的参数。假设我们要定义一个过程,其中包含 1 个必要参数和 2 个可能的可选参数。如果给出了两个可选参数,我们假设第一个总是option1
,第二个是option2
,但如果只给出一个可选参数,则取决于是否它是 integer
类型或不是 option1
或 option2
。
要询问传递的参数的数量或传递参数的其余部分,您可以使用 _npassed
和 _nrest
。命令 assigned()
检查是否为某物分配了值。您可以通过 type(-,-)
或 -::-
检查某物是否属于特定类型。所以这是简单的代码。
test := proc( x )
local option1, option2:
if _nrest = 2 then
option1 := _rest[1]:
option2 := _rest[2]:
elif _nrest = 1 then
if _rest[1] :: integer then
option1 := _rest[1]:
else
option2 := _rest[1]:
end if:
end if:
printf( "necessary argument is %a\n", x ):
if assigned( option1 ) then
printf( "option 1 is given and is %d\n", option1 ):
end if:
if assigned( option2 ) then
printf( "option 2 is given and is %a\n", option2 ):
end if:
end proc:
这是上述过程针对不同输入的输出屏幕截图。
关于maple - 处理多个可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72348421/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!