2

我正在编写一个用于程序图像生成(Clisk)的库,它允许用户定义自己的数学函数来生成图像。

他们显然可以定义一个函数,该函数可能导致某些像素被零除,例如(伪代码)

red = 1.0 / (xposition - 0.5)

每当 xposition = 0.5(图像中间)时,这将导致除以零

理想情况下,我不希望图像生成崩溃......但同时我不想创建一个笨拙的黑客来忽略除以零,这会在以后引起问题。

什么是处理这些案件的良好、稳健、系统的方法?

4

3 回答 3

8

理想情况下,我不希望图像生成崩溃......但同时我不想创建一个笨拙的黑客来忽略除以零,这会在以后引起问题。

(我假设您的意思是该片段是一些用户提供的代码的示例......)

显然,如果用户提供的代码可能引发异常,那么您将无法阻止这种情况的发生。(并且在除法之前检查的建议显然与您无关。)

那么除了“崩溃”你还能做什么呢?生成空图像?忽略用户的功能?你会产生垃圾......这不是用户需要的。

您当然无法触及并修复他/她的 java 代码。(如果该片段是用某种自定义语言编写的代码,那么您也无法访问并更正它。您/您的库不知道用户提供的代码该做什么......)

不。我认为最好的答案是将用户提供的代码中出现的任何意外(未经检查的)异常包装在您自己的异常中,清楚地告诉用户错误发生在他的代码中。然后由调用您的库代码的应用程序代码来处理异常还是“崩溃”。


如果您要求用户使用“良好、健壮、系统的方法”来编写他们的功能,我认为您是在找错树。这不是你真正关心的......

于 2012-05-23T01:15:34.967 回答
0

您总是可以只提供一个参数,询问他们在除以零时要做什么。毕竟,这是他们的代码——他们应该知道什么最适合他们的情况。

那么问题就变成了,该参数的合理默认值是多少?我想说“返回 0.0”“抛出异常”对于这个应用程序都是合理的。只要确保你记录它。

于 2012-05-23T15:49:34.007 回答
0

我真的不是图形程序员,但你可以

 private static final double MIN_X = 0.0000001

 red = 1.0 / Math.max(xpos - 0.5, MIN_X);

显然,如果你允许负数,你可能不得不在那里删除一个绝对值

于 2012-05-23T01:11:17.123 回答