在Ruby模块中分配常量

时间:2019-01-23 18:15:49

标签: ruby

我有一个模块:

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

符合预期。

1 个答案:

答案 0 :(得分:4)

这只是定义顺序的问题:

module Foo
  module Bar
    def self.is_ok
      true
    end
    TEST = is_ok
  end
end

完全按照您的期望工作。

简单的原因是Ruby类定义是逐行评估的;在您的示例中分配了TEST时,尚未定义::is_ok