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

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

如何为该函数编写类型注释?

最佳答案

假设您已经为F32Vector使用了不透明类型,则可以这样编写:

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

如果您还没有不透明类型,可以像这样导入:
(require/typed ffi/vector
               [#:opaque F32Vector f32vector?])

当然,您可以将以上子句合并为一个require/typed

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

10-04 10:48