2011-07-02 102 views
8

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

举例来说,如果我有:

f[x_Integer]:=1 
    f[x_]:=Message[errm::err, x] 

,我调用F不带参数:

f[] 

'什么也没发生',我想迫使特定的(无差错)的条件。

(背景:我的包和面向对象系统类制作MUnit测试。)

+1

据我所知,它在mathematica中的函数是“绑定”到它们的参数上的,因为如果你定义f(a),f仍然是未定义的。 – Gleno

+3

@Gleno Mathematica中没有函数(除了可能的纯函数和编译函数)。全局规则是什么看起来像函数定义。你可能的意思是,模式'f [某事]'的全局规则的存在并不意味着存在另一个普通的'f'全局规则 - 这是真的。 –

回答

10

这?

f[x_Integer] := 1 
f[x_] := Message[errm::err, x] 
f[] := Message[errm::err] 
+0

删除我的答案...一分钟迟到:) –

+0

@belisarius我的部分好运:) – acl

+2

+1。 @ndroock1的代码和这里的'Null'都会在错误时返回。这对我来说似乎并不合适。输出必须以某种方式具有意义,即使是在出错时。在符号环境中,使用诸如'f []:=“nothing”/; Message [errm :: err]'这样的技巧来使'f []'返回一个消息并评估它自己是很常见的。在编程环境中,通常会发出错误消息并返回'$ Failed',如'f []:=(Message [errm :: err]; $ Failed)'。有时(对于内部函数来说)异常更合适。选择哪一个取决于上下文。 –

9

作为替代明确列出零ARGS可能性,你可以做

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

这也将赶上几个传递的参数错误的情况下(假定它是一个错误)。

+0

这是一个好主意 – acl

相关问题