我有一个模块:
declare
a_basket_id table1.basket_id%type;
a_order_id table1.order_id%type;
begin
for cur_r in (select or_id from table1) loop
a_basket_id := cut(function1(cur_r.or_id), 1, '@');
a_order_id := cut(function1(cur_r.or_id), 2, '@');
update table1 set
basket_id = a_basket_id
order_id = a_order_id
where or_id = cur_r.or_id;
end loop;
end;
我想在定义的模块中有一个常数,只需一次。
我尝试过这样:
module Foo
module Bar
TEST = "ok"
def self.is_ok; true end
end
end
Foo::Bar::TEST # => "ok"
Foo::Bar.is_ok # => true
然后我得到一个错误,说module Foo
module Bar
TEST = is_ok
def self.is_ok; true end
end
end
。这意味着undefined local variable or method 'is_ok' for Foo::Bar:Module
尚未定义。
在模块类方法之外的其他时间点定义了常量吗?
此外,我还有另一个示例:
is_ok
在这里,我得到:
module Foo
module Bar
TEST = "ok"
def self.is_ok; true end
end
module YYY
TEST = Foo::Bar::TEST
TEST2 = Foo::Bar.is_ok
end
end
符合预期。
答案 0 :(得分:4)
这只是定义顺序的问题:
module Foo
module Bar
def self.is_ok
true
end
TEST = is_ok
end
end
完全按照您的期望工作。
简单的原因是Ruby类定义是逐行评估的;在您的示例中分配了TEST
时,尚未定义::is_ok
!