在Chapel中声明一个未知类型数组的函数?

时间:2018-03-19 04:34:36

标签: chapel

我想在数组上编写一个函数,但我想要一个泛型类型。对于论证,让我们把它作为一个总和。

proc mySum(x:[] int) {
  return + reduce x;
}
proc mySum(x:[] real) {
  return + reduce x;
}

泛型类型的符号是什么?我认为它类似于proc mySum(x: [] <T>) {},但是不起作用。

1 个答案:

答案 0 :(得分:6)

最简单的方法是在正式的类型声明中保留元素类型:

 $textbox = $section->addTextBox(
        array(
            'marginTop' => -100,
            'marginLeft' => -100,
            'posHorizontal' => 'absolute',
            'posVertical' => 'absolute',
            'align' => 'left',
            'positioning' => 'relative',
            'width'       => 200,
            'height'      => 40,
            'borderColor' => '#eeeeee',
            'borderSize'  => 0,
            'bgColor' => 'black',
        )
    );

会给你:

proc mySum(x:[]) {
  return + reduce x;
}

writeln(mySum([1, 2, 3]));
writeln(mySum([1.0, 2.0, 3.0]));

如果您希望以符号方式引用该类型,您还可以使用以下语法查询它并将其绑定到标识符(6 6.0 此处):

t

会给你:

proc mySum(x:[] ?t) {
  writeln("I'm computing a reduction over an array of ", t:string);
  return + reduce x;
}

writeln(mySum([1, 2, 3]));
writeln(mySum([1.0, 2.0, 3.0]));

(当然,您也可以执行类似I'm computing a reduction over an array of int(64) 6 I'm computing a reduction over an array of real(64) 6.0 等类型的变量声明。)