我正在尝试将使用ffi / vector的f32vector的Racket程序转换为Typed Racket程序,这需要通过require / typed为f32vector提供注释。然而f32vector是可变的;它可以采用可变数量的参数,因此以下两个都是可以接受的:
(f32vector 1.0 3.0 4.0 7.0)
(f32vector 2.0 2.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
以及其他捆绑的库。