Mathematica:如何检查是否没有为函数提供参数?

nil*_*ock 8 wolfram-mathematica

如何检查是否没有为函数提供参数?

例如,如果我有:

  f[x_Integer]:=1
  f[x_]:=Message[errm::err, x]
Run Code Online (Sandbox Code Playgroud)

我没有争吵地打电话给f:

   f[]
Run Code Online (Sandbox Code Playgroud)

"没有任何反应",我想强迫一个特定的(错误)条件.

(背景:我正在为包和OO-System类进行MUnit测试.)

acl*_*acl 10

这个?

f[x_Integer] := 1
f[x_] := Message[errm::err, x]
f[] := Message[errm::err]
Run Code Online (Sandbox Code Playgroud)

  • +1.@ ndroock1的代码和这里的'Null`都出错了.这对我来说似乎并不合适.即使出现错误,输出也必须以某种方式有意义.在符号环境中,通常使用诸如`f []:="nothing"/; Message [errm :: err]`之类的技巧来使`f []`返回消息并对其自身进行求值.在编程环境中,通常会发出错误消息并返回`$ Failed`,如`f []:=(Message [errm :: err]; $ Failed)`.有时(对于内部函数说)异常更合适.选择哪一个取决于上下文. (2认同)

Leo*_*rin 10

作为明确列出零args可能性的替代方法,您可以这样做

f[x_Integer] := 1
f[args___] := (Message[errm::err, {args}];$Failed);
Run Code Online (Sandbox Code Playgroud)

这也会捕获几个传递参数的错误情况(假设它是一个错误).