Scheme 类型化球拍中变量函数的类型是什么?
我正在尝试将使用ffi/vector中的f32vector的Racket程序转换为类型化Racket程序,这需要通过require/Typed为f32vector提供注释。然而,F32矢量是可变的;它可以接受数量可变的参数,因此以下两项都是可以接受的:Scheme 类型化球拍中变量函数的类型是什么?,scheme,racket,variadic-functions,typed-racket,Scheme,Racket,Variadic Functions,Typed Racket,我正在尝试将使用ffi/vector中的f32vector的Racket程序转换为类型化Racket程序,这需要通过require/Typed为f32vector提供注释。然而,F32矢量是可变的;它可以接受数量可变的参数,因此以下两项都是可以接受的: (f32vector 1.0 3.0 4.0 7.0) (f32vector 2.0 2.1) 如何编写此函数的类型批注?假设您已经为F32Vector创建了一个不透明类型,那么您可以这样编写类型: (require/typed ffi/vec
(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 ffi/vector
[f32vector (Real * -> F32Vector)])
(require/typed ffi/vector
[#:opaque F32Vector f32vector?])
当然,您可以将上述子句合并为一个require/typed
旁注:在将来,类型化Racket可能还支持一个
->*
类型构造函数,该构造函数与用于编写契约的符号(包括rest参数)相匹配。另外,希望我们可以提供一个类型化/ffi/vector
以及其他捆绑库。您可能希望使用浮点
或者甚至单浮点
而不是实数
。谢谢,这正是我想要的。有时间把它添加到输入的Racket文档中可能会很有用,或者更容易找到它是否已经存在。没问题。《打字球拍指南》在第4.8.1节中确实解释了这种语法,但可能不够清楚或不容易找到。如果您对如何改进它有任何建议,请随时提交更改请求,写信给邮件列表,或在IRC上ping我们中的一个。@Asumutakakawa,哎呀,我在阅读指南的那一部分时错过了它。出于某种原因,我试图使用。。。用符号代替*。我的错;指南本身非常清楚。@Asumutakakawa刚刚添加了对这些向量的支持。您可以在此处获取新版本的Racket: