题
我需要存储一个新类型的理性数字,该类型表示为分子/分母,用于存储3/5之类的分数。我找到了以下内容。
CREATE TYPE Rational AS OBJECT (
num INTEGER,
den INTEGER,
MAP MEMBER FUNCTION convert RETURN REAL,
MEMBER PROCEDURE normalize,
MEMBER FUNCTION reciprocal RETURN Rational,
MEMBER FUNCTION plus (x Rational) RETURN Rational,
MEMBER FUNCTION less (x Rational) RETURN Rational,
MEMBER FUNCTION times (x Rational) RETURN Rational,
MEMBER FUNCTION divby (x Rational) RETURN Rational,
PRAGMA RESTRICT_REFERENCES (DEFAULT, RNDS,WNDS,RNPS,WNPS)
);
我如何添加一个共同点,即分母不能为零。
解决方案
您需要为您的类型声明构造函数。然后,您可以将自己喜欢的任何验证放在体内。
CREATE TYPE Rational AS OBJECT (
num INTEGER,
den INTEGER,
MAP MEMBER FUNCTION convert RETURN REAL,
MEMBER PROCEDURE normalize,
MEMBER FUNCTION reciprocal RETURN Rational,
MEMBER FUNCTION plus (x Rational) RETURN Rational,
MEMBER FUNCTION less (x Rational) RETURN Rational,
MEMBER FUNCTION times (x Rational) RETURN Rational,
MEMBER FUNCTION divby (x Rational) RETURN Rational,
constructor function rational
(n integer, d integer)
return self as result,
PRAGMA RESTRICT_REFERENCES (DEFAULT, RNDS,WNDS,RNPS,WNPS)
);
在您的字体中,添加了构造函数代码:
constructor function rational
(n integer, d integer)
return self as result
is
begin
if d = 0 then
raise_application_error(-20000, 'Denominator cannot be zero!');
end if;
self.num := n;
self.den := d;
end rational;
不隶属于 StackOverflow