我需要存储一个新类型的理性数字,该类型表示为分子/分母,用于存储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; 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top