我想让一个 oracle 对象返回自身并能够链接这些调用。我怎么做?
我尝试返回相同的类型,但它不起作用,我还尝试添加一个由函数调用的过程,但它也不起作用。总是抱怨修改宽度成员的值。看起来函数不会产生副作用?它们是按照更数学的函数原理建模的吗?这可以实现吗?我想我可以编写这个函数,以便它用 SELF 构建一个新的矩形,但工作量太大了。
我的目标是能够像 jQuery 或一些 java 类(单例?)一样链接调用。就像是:
r := r.setWidth(0).setWidth(1).setWidth(2);
当然,它会有更多的方法,而且它不会是一个矩形。这是错误:
Error: PLS-00363: expression 'SELF' cannot be used as an assignment target
Line: 18
Text: stWidth(w);
-
CREATE OR REPLACE TYPE rectangle AS OBJECT
(
-- The type has 3 attributes.
length NUMBER,
width NUMBER,
area NUMBER,
-- Define a constructor that has only 2 parameters.
CONSTRUCTOR FUNCTION rectangle(length NUMBER, width NUMBER)
RETURN SELF AS RESULT,
MEMBER FUNCTION setWidth(w NUMBER) RETURN rectangle,
MEMBER PROCEDURE stWidth(w NUMBER)
)
-
CREATE OR REPLACE TYPE BODY rectangle AS
CONSTRUCTOR FUNCTION rectangle(length NUMBER, width NUMBER)
RETURN SELF AS RESULT
AS
BEGIN
SELF.length := length;
SELF.width := width;
-- We compute the area rather than accepting it as a parameter.
SELF.area := length * width;
RETURN;
END;
MEMBER PROCEDURE stWidth(w NUMBER) IS
BEGIN
self.width := w;
END;
MEMBER FUNCTION setWidth(w NUMBER) RETURN rectangle IS
BEGIN
stWidth(w);
RETURN SELF;
END;
END;
提前致谢。