如何定义SPL中可以跨文件共享的常量?

时间:2013-07-02 17:40:08

标签: infosphere-spl

Custom运算符可以在其state子句中定义常量,但是如何定义可以跨多个运算符和多个文件使用的常量?

理想情况下,我正在寻找一种在命名空间中定义常量的方法。

2 个答案:

答案 0 :(得分:3)

您可以定义一个简单的SPL函数来返回常量:

namespace my.name.space;
...
float64 MAX_LATITUDE() {return 90.0;}
...
composite MyMainComposite
{
...

这在整个命名空间中自动可用。除了括号之外,它在任何使用它的地方都可以像任何常量一样工作。我没有详细查看生成的代码,但我假设SPL或C ++编译器将内联它所需的内容,确保在运行时没有实际的函数调用开销。

答案 1 :(得分:0)

目前无法在命名空间中定义常量,因此无法定义常量一次并在多个SPL文件中使用它。

对于单个文件,以下是一些选项:

  • 使用混合模式并在Perl代码中定义常量
  • 使用复合参数表达式:

   composite MyMainComposite {
     param
        expression<float64> $TimerInterval : 4.0;  // 4 seconds

另一个选项是编译时选项/参数 - 请参阅getCompileTimeValue() and getCompileTimeListValue()

对于存在于另一个文件中的SPL函数,您必须将它们作为函数参数传递,或者手动保持代码同步。