Wolfram mathematica 有什么建议的做法来验证;“类型”;函数的';mathematica中的输入参数

Wolfram mathematica 有什么建议的做法来验证;“类型”;函数的';mathematica中的输入参数,wolfram-mathematica,Wolfram Mathematica,可能重复: 假设我有一个函数 func[xNumber_,str_,listOfReals_]:=Module[{}, .... ] 我想测试用户是否给出了正确类型的输入表达式。我知道我可以做一些类似于xNumber\uux?NumberQ的事情,但我似乎找不到如何生成一些信息性错误消息。因此,目前,在模块的代码中,我插入If,在这里我测试参数的类型,如果测试失败,我打印一些消息并返回False 要实现这一点,什么应该被视为更聪明/更规范/更好的做法?内置函数消息正是您所需要的。以下示例来自

可能重复:

假设我有一个函数

func[xNumber_,str_,listOfReals_]:=Module[{},
....
]
我想测试用户是否给出了正确类型的输入表达式。我知道我可以做一些类似于
xNumber\uux?NumberQ
的事情,但我似乎找不到如何生成一些信息性错误消息。因此,目前,在模块的代码中,我插入
If
,在这里我测试参数的类型,如果测试失败,我打印一些消息并返回
False


要实现这一点,什么应该被视为更聪明/更规范/更好的做法?

内置函数
消息
正是您所需要的。以下示例来自文档

首先定义一个函数,该函数发出错误消息并在出错时返回未计算的值

 rsqrt[x_] /; If[TrueQ[x >= 0], True, Message[rsqrt::nnarg, x]; False] := Sqrt[x]
接下来,定义消息

 rsqrt::nnarg = "The argument `1` is not greater than or equal to zero.";
输入正确后,函数将按定义进行计算

 rsqrt[2.25]
返回
1.5
。但是,如果输入不正确,您将得到

 In[4]:= rsqrt[-2.25]

 During evaluation of In[4]:= rsqrt::nnarg: The argument -2.25 is not greater than or equal to

 zero.

 Out[4]= rsqrt[-2.25]

另一种可能是使用Assert。有关示例,请参见?断言

Assert的一个优点是可以关闭Asserts,这样最终就不会影响代码性能。i、 e.调试和测试代码完成后

您还可以使用Assert为未传递正确类型的函数调用生成消息,如下所示:

foo[x_?(NumericQ[#] &)] := x^2
foo[x_] := Assert[NumericQ[x]]


On[Assert]
foo[3]
===>9

foo["a"]
===>Assert::asrtf: Assertion NumericQ[a] failed. >>

您可以单独关闭和打开消息,例如
off[rsqrt::nnarg]
,而断言是一起关闭和打开的,例如
off[Assert]
。此问题可能是的重复,因此给出了。