【发布时间】:2014-02-27 20:00:09
【问题描述】:
假设一个对象被创建为:
CREATE OR REPLACE type test_obj as object (
item varchar2(20),
constructor function test_obj return self as result
)
CREATE OR REPLACE type body test_obj as
constructor function test_obj return self as result as
begin
self.item := 'xyz';
return;
end;
end;
那么在plsql中可以这样使用:
declare
x test_obj;
begin
x:= test_obj();
end;
并且可以创建成员函数并调用它们,例如:
x test_obj := test_obj();
y number;
y := x.somefunction('abc');
是否可以创建一个成员函数来支持这种类型的语法:
x test_obj := test_obj();
y number;
y := x('abc');
【问题讨论】:
-
换句话说,是否存在“默认”成员函数之类的东西?据我所知,不是。
-
因为调用构造函数需要对象名,
x test_obj := test_obj();oracle 开门见山。也许有一天!!! -
在该范围内,
x是局部变量的名称(test_obj类型)。它不能像函数一样被调用。但是,您可以为test_obj创建一个替代构造函数,以便您可以y := test_obj('abc'); -
另一方面,如果您声明
x是一个由VARCHAR2 索引的数组(例如table of test_obj),那么您可以执行x('abc') := test_obj();和y := x('abc');(如果y是声明为另一个test_obj) -
据我所知,您希望在 C++ 中拥有类似函子的东西,对吧? int operator()(char* p) { /* 那里的代码 */ }. PL/SQL 不允许重载 +、-、/、() 等运算符。从这个意义上说,似乎没有办法获得类似于 C++ 的函子。