Typed Racket中可变参数的类型是什么?

时间:2014-02-10 09:28:05

标签: scheme racket variadic-functions typed-racket

我正在尝试将使用ffi / vector的f32vector的Racket程序转换为Typed Racket程序,这需要通过require / typed为f32vector提供注释。然而f32vector是可变的;它可以采用可变数量的参数,因此以下两个都是可以接受的:

(f32vector 1.0 3.0 4.0 7.0)
(f32vector 2.0 2.1)

我如何编写此函数的类型注释?

1 个答案:

答案 0 :(得分:3)

假设您已经为F32Vector设置了一个opaque类型,那么您可以编写如下类型:

(require/typed ffi/vector
               [f32vector (Real * -> F32Vector)])

如果您还没有opaque类型,可以像这样导入:

(require/typed ffi/vector
               [#:opaque F32Vector f32vector?])

当然,您可以将上面的条款合并为一个require/typed


旁注:将来,Typed Racket可能还支持一个->*类型的构造函数,该构造函数与用于编写契约的符号(包括其余参数)相匹配。此外,希望我们可以提供typed/ffi/vector以及其他捆绑的库。